Chinaunix

标题: Python怎么防止同一个程序出现多个进程 [打印本页]

作者: 盖茨他爹    时间: 2010-03-06 13:16
标题: Python怎么防止同一个程序出现多个进程
比如用py2exe打包一个Python写的窗口程序test.exe,点击它一下就打开一个进程,点它10次就打开10个窗口(进程),怎么才能让打开一个进程以后再点击就不打开进程了呢
作者: luffy_deng    时间: 2010-03-06 14:31
过滤一下进程列表吧。不调用win32api的话 可以过滤tasklist的输出,比如
import os
for t in  os.popen('tasklist').readlines():
    if 'test.exe' in t.split()[0:1]:
        exit(0)
作者: 盖茨他爹    时间: 2010-03-06 15:16
如果有两个名字不同的test1.exe和test2.exe的相同程序,2楼的方法会不会失效啊

我试了一下Foxmail,分别复制到两个不同的文件夹foxmail.exe改成两个不同的名字,但是启动其中一个以后再点击另一个就不会打开了,这是通过什么判断的呢,路径不同,进程名称不同

不过2楼的已经可以帮我解决问题了,用户如果BT到自己改成两个不同的名字同时运行,就让他自己折腾去吧{:3_183:}

谢谢2楼大侠
作者: notbusy    时间: 2010-03-06 18:15
通过改名多开两个进程到没有什么,可是如果有一个进程的程序名和你的程序同名,你的就打不开了。应该用一个进程间同步方法避免重复启动,比如一个临时文件锁,或共享内存。
作者: luffy.deng    时间: 2010-03-06 19:23
回复 4# notbusy


使用文件锁是可以的,不过win下很少用。其他办法就比较麻烦了  比如可以用mutex
  1. import time
  2. import win32event, pywintypes, win32api

  3. ERROR_ALREADY_EXISTS = 183
  4. sz_mutex = "test_mutex"


  5. hmutex = win32event.CreateMutex(None, pywintypes.FALSE,sz_mutex)
  6. if (win32api.GetLastError() == ERROR_ALREADY_EXISTS):
  7.     print"running..."
  8.     exit(0)
  9. else:
  10.     time.sleep(20)
  11.     print "start pppp"
复制代码

作者: 盖茨他爹    时间: 2010-03-06 19:48
谢谢朋友们,用5楼的代码已解决
作者: wqjwftcaqr    时间: 2010-03-07 09:51
比如用py2exe打包一个Python写的窗口程序test.exe,点击它一下就打开一个进程,点它10次就打开10个窗口(进程 ...
盖茨他爹 发表于 2010-03-06 13:16



    怎么把python2.5写的程序,弄成exe.在没有装python上的机器也能运行?
新手
步骤具体一点呵呵
作者: 盖茨他爹    时间: 2010-03-07 14:33
怎么把python2.5写的程序,弄成exe.在没有装python上的机器也能运行?
新手
步骤具体一点呵呵
wqjwftcaqr 发表于 2010-03-07 09:51



    http://hekun06.blogbus.com/logs/20426007.html
作者: wmjie    时间: 2010-03-08 12:34
想到一种防止程序多次执行的方法。
用 socket 开一个 udp 的端口。
每次运行的时候,先检查这个端口有没有打开?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2