簡體   English   中英

無法在python中同時運行線程

[英]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=關鍵字現在設置為函數的返回值 你想擁有這個功能 那么,現在實際發生的是:

  1. 調用Function1()
  2. t1的目標設置為NoneFunction1()返回值
  3. Function2()t2重復1-2次。
  4. 啟動t1t2線程,它們都是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.

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