我有一个简单的(希望)问题: 当我编写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()"它或多或少永远等待
有人可以解释一下吗?答案 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",)
。
逗号创建一个元组,否则它只是括号中的一个字符串。