免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10911 | 回复: 8
打印 上一主题 下一主题

Python怎么防止同一个程序出现多个进程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-06 13:16 |只看该作者 |倒序浏览
比如用py2exe打包一个Python写的窗口程序test.exe,点击它一下就打开一个进程,点它10次就打开10个窗口(进程),怎么才能让打开一个进程以后再点击就不打开进程了呢

论坛徽章:
0
2 [报告]
发表于 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)

论坛徽章:
0
3 [报告]
发表于 2010-03-06 15:16 |只看该作者
如果有两个名字不同的test1.exe和test2.exe的相同程序,2楼的方法会不会失效啊

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

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

谢谢2楼大侠

论坛徽章:
0
4 [报告]
发表于 2010-03-06 18:15 |只看该作者
通过改名多开两个进程到没有什么,可是如果有一个进程的程序名和你的程序同名,你的就打不开了。应该用一个进程间同步方法避免重复启动,比如一个临时文件锁,或共享内存。

论坛徽章:
0
5 [报告]
发表于 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"
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-03-06 19:48 |只看该作者
谢谢朋友们,用5楼的代码已解决

论坛徽章:
0
7 [报告]
发表于 2010-03-07 09:51 |只看该作者
比如用py2exe打包一个Python写的窗口程序test.exe,点击它一下就打开一个进程,点它10次就打开10个窗口(进程 ...
盖茨他爹 发表于 2010-03-06 13:16



    怎么把python2.5写的程序,弄成exe.在没有装python上的机器也能运行?
新手
步骤具体一点呵呵

论坛徽章:
0
8 [报告]
发表于 2010-03-07 14:33 |只看该作者
怎么把python2.5写的程序,弄成exe.在没有装python上的机器也能运行?
新手
步骤具体一点呵呵
wqjwftcaqr 发表于 2010-03-07 09:51



    http://hekun06.blogbus.com/logs/20426007.html

论坛徽章:
0
9 [报告]
发表于 2010-03-08 12:34 |只看该作者
想到一种防止程序多次执行的方法。
用 socket 开一个 udp 的端口。
每次运行的时候,先检查这个端口有没有打开?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP