[英]not able to run threads simultaneosly in python
from threading import Thread
import time
def Function1():
print "11"
print "12"
time.sleep(5)
print "13"
print "14"
def Function2():
print "21"
print "22"
time.sleep(10)
print "23"
print "24"
for i in range(3)
t1= Thread(target=Function1())
t2= Thread(target=Function2())
t1.start()
t2.start()
以上程序順序運行......
11
12
13
14
21
22
23
24
11
12
13
14
21
22
23
24
11
12
13
14
21
22
23
24
如何同時運行兩個函數(線程)? 我不想使用多處理..我需要編寫python腳本進行性能測試...因為我需要線程同時運行有沒有辦法解決這個問題?
如何同時運行兩個函數(線程)? 我不想使用多處理..
不幸的是,你不可能同時擁有這兩個(或者至少,你不能使用threading
真正同時運行)。 這是CPython解釋器GIL的固有限制 。
threading
提供的唯一內容是單核上下文切換,其中解釋器將在單個核上運行函數,然后臨時交換它並在單核上運行不同的函數,等等。這對於執行某些操作的應用程序可能很有用而,例如,監控用戶輸入,但這是關於它。
您的問題是target=
關鍵字現在設置為函數的返回值 。 你想擁有這個功能 。 那么,現在實際發生的是:
Function1()
t1
的目標設置為None
( Function1()
返回值 Function2()
和t2
重復1-2次。 t1
和t2
線程,它們都是None
作為目標。 這沒有效果。 更換
t1= Thread(target=Function1())
t2= Thread(target=Function2())
同
t1= Thread(target=Function1)
t2= Thread(target=Function2)
如果您希望在多個內核上並行執行Python代碼,那么您唯一的希望就是multiprocessing
。 因為,如另一個答案所述,CPython解釋器只允許同時執行一段Python代碼(參見“Global Interpreter Lock”)。 有很多關於此的信息可以在網上找到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.