[英]How to run the same function in parallel with different arguments?
我想多次運行相同的函數,每次使用多線程或多處理時都使用不同的參數。 到目前為止,這是我的代碼:
import threading
import time
def infiniteloop1(a):
while True:
print(a)
time.sleep(1)
thread1 = threading.Thread(target=infiniteloop1('aaa'))
thread1.start()
thread2 = threading.Thread(target=infiniteloop1('bbb'))
thread2.start()
預期產量:
aaa
bbb
aaa
bbb
即aaa
和bbb
每個塊將每秒同時打印一次。
實際輸出:每秒僅打印aaa
threading.Thread(target=infiniteloop1('aaa'))
不會在單獨的線程上調用infiniteloop1
。
threading.Thread
的target
參數應該是可調用的。 相反, infiniteloop1('aaa')
的計算結果(=呼叫) infiniteloop1
甚至在threading.Thread
被調用, thread1.start
從未甚至達到了。
如果infiniteloop1
實際上沒有創建無限循環,您將自己發現這一點。 例如,如果只是返回參數,它將得到:
def infiniteloop1(a):
return a
thread1 = threading.Thread(target=infiniteloop1('aaa'))
錯誤TypeError: 'str' object is not callable
會被引發。 這是因為infiniteloop1('aaa')
被評估為'aaa'
,然后將其作為target
傳遞給threading.Thread
。
相反,請使用args
kwarg單獨提供一個threading.Thread
及其參數(請注意,它期望可迭代,因此應將單個字符串參數作為一個元組傳遞)。
thread1 = threading.Thread(target=infiniteloop1, args=('aaa',))
thread1.start()
thread2 = threading.Thread(target=infiniteloop1, args=('bbb',))
thread2.start()
輸出:
aaa
bbb
bbbaaa
aaa
bbb
aaa
bbb
aaa
bbb
aaabbb
aaabbb
bbb
aaa
aaabbb
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.