1

簡単な (願わくば) 質問があります。私の問題は、GUI を書いたときに始まりました。重い計算を実行している間は、ユーザー インターフェイスを更新できません。

-スレッドを使用する場合、GILがあります(遅すぎませんが、GUIがフリーズします)

私は非常に多くのことを試したので、私の最後の希望は新しいプロセスを開始することです(そしてここで問題)

まず第一に: -i は以前にプロセスを使用したことがありません (セマンティック エラーである可能性があります)。

-プロセスの制限 (および例外) がわからない

-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 に答える