簡體   English   中英

如何使用不同的參數並行運行相同的函數?

[英]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

aaabbb每個塊將每秒同時打印一次。

實際輸出:每秒僅打印aaa

threading.Thread(target=infiniteloop1('aaa'))不會在單獨的線程上調用infiniteloop1

threading.Threadtarget參數應該是可調用的。 相反, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM