如何在Python中管理多个进程?

时间:2012-07-06 18:01:46

标签: python

我有一个简单的(希望)问题: 当我编写GUI时,我的问题开始了。 我执行繁重的计算时无法刷新用户界面。

- 如果我使用线程,那就是G.I.L. (不是太慢但是gui冻结)

我尝试了很多东西,我最后的希望是开始一个新的过程(这里是问题)

首先: -i从未使用过程(可能是语义错误)

- 我不知道流程的限制(和例外)

-i我正在运行cpython 3.1.2,在Mac os x v 10.6.8

上运行

这是我需要解决的一个例子(不是真正的代码,但结果是相同的):

from multiprocessing import *
def bob(q):
    print(q)
A=Process(target=bob,args=("something"))
A.start()
A.is_alive()
A.join()

,输出为:

True

它没有打印"某些东西",所以我猜它不会运行这个过程,但是" A.is_alive()"说它正在运行,当口译员到达" A.join()"它或多或少永远等待

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

你应该给出一个参数列表,而不仅仅是参数。这对我来说很重要:

from multiprocessing import *
def bob(q):
    print(q)
A=Process(target=bob,args=["something"])
A.start()
A.is_alive()
A.join()

以下使用sleep-sort(http://stackoverflow.com/questions/6474318/what-is-the-time-complexity-of-the-sleep-sort)对大写字符A-Z进行排序

somestring="DGAECBF"
from multiprocessing import *
def bob(t):
    import time
    time.sleep(ord(t)-ord("A"))
    print(t)
p=[]
for c in somestring : 
    p.append(Process(target=bob,args=([c])))
    p[-1].start()
for pp in p:
    pp.join()

答案 1 :(得分:1)

您需要添加逗号:args=("something",)

逗号创建一个元组,否则它只是括号中的一个字符串。