1

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

- 如果我使用线程有 GIL(不是太慢但 gui 冻结)

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

首先:-我以前从未使用过进程(这可能是语义错误)

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

-i 在 Mac os xv 10.6.8 上使用 cpython 3.1.2 运行

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

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()”时,它或多或少地等待永远

有人可以解释一下吗?

4

2 回答 2

1

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

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

于 2012-07-06T21:03:42.800 回答
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) 对大写字符 AZ 进行排序

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()
于 2012-07-06T20:20:44.707 回答