V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
coofly
V2EX  ›  Python

如何在 Python 中进行跨进程跨脚本同步?

  •  
  •   coofly · 2014-11-08 02:00:54 +08:00 · 4510 次点击
    这是一个创建于 3698 天前的主题,其中的信息可能已经有所发展或是发生改变。
    脚本A和脚本B之间需要进行同步,它们之间的启动先后顺序不定
    我尝试把multiprocessing.Lock()定义在共同import的文件中
    然后果然没有效果,这种情况我应该怎么办呢?

    以前都是做windows开发,遇到这种问题,两个进程创建一个同名的Mutex就搞定了
    虽然也可以用win32 api搞定,但是有没有与平台无关的办法?

    第一次在v2ex问问题,谢谢各位!
    11 条回复    2014-11-09 00:46:39 +08:00
    20150517
        1
    20150517  
       2014-11-08 03:39:04 +08:00 via Android
    redis
    way2exluren
        2
    way2exluren  
       2014-11-08 07:45:03 +08:00 via iPad
    打开绝对路径的文件?
    gamexg
        3
    gamexg  
       2014-11-08 08:11:02 +08:00
    绑端口?
    hahastudio
        4
    hahastudio  
       2014-11-08 10:28:42 +08:00   ❤️ 1
    既然是两个脚本,想必就是两个 python 进程了
    IPC 的话基本没有简单的解决方案= =
    基本上简单的就是文件和端口了吧= =
    跨平台的话,像你说的 Windows 有 mutex 的接口,但是 Linux 还有 mmap 呢,不过这两个都不能算跨平台了= =
    试试这个 recipe
    http://code.activestate.com/recipes/519626-simple-file-based-mutex-for-very-basic-ipc/
    EPr2hh6LADQWqRVH
        5
    EPr2hh6LADQWqRVH  
       2014-11-08 10:51:37 +08:00
    mkfifo
    mahone3297
        6
    mahone3297  
       2014-11-08 10:57:26 +08:00
    我感觉,这个问题就是,多进程间如何通信?
    wibile
        7
    wibile  
       2014-11-08 11:13:40 +08:00
    mckelvin
        8
    mckelvin  
       2014-11-08 12:21:09 +08:00   ❤️ 1
    如果LZ只是要一个互斥锁,可以用 fcntl。和 @hahastudio 说的是同一个东西,之前没注意到他的回复于是写了一份:

    https://gist.github.com/mckelvin/0b799d940409d94208fe

    实现的效果是同一时间 script1.pyscript2.py 只有一个在跑。就是LZ说的「两个进程创建一个同名的Mutex」的效果吧?

    不过这么做可能会发生 script1 - script1 - script2 - script1(同一个脚本连着跑两次另一个缺没跑过)这样的执行序列.
    fakevam
        9
    fakevam  
       2014-11-08 12:38:55 +08:00
    尝试cffi,在python里面调用win32/posix API解决问题好了
    不要用ctypes,ctypes太折磨人了,当然选第三方模块也可以
    mckelvin
        10
    mckelvin  
       2014-11-08 13:33:02 +08:00   ❤️ 1
    匿了…… 没主意到LZ说Windows http://code.activestate.com/recipes/65203/ 可能可以。
    coofly
        11
    coofly  
    OP
       2014-11-09 00:46:39 +08:00
    这应该是一种比较常见的需求吧,怎么会是这个样子……

    判断平台用文件锁搞定了,谢谢各位!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4649 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 04:03 · PVG 12:03 · LAX 20:03 · JFK 23:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.