无法在python中同时运行线程

时间:2016-03-09 11:54:45

标签: python multithreading python-2.7 python-multithreading frappe

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脚本...因为我需要线程同时运行 有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

  

如何同时运行两个函数(线程)?我不想使用多处理..

不幸的是,你不能同时拥有这两个(或者至少,你不能使用threading同时运行这些东西)。这是inherent limitation of the CPython interpreter's GIL

threading唯一提供的是单核上下文切换,其中解释器将在单个核上运行一个函数,然后暂时将其交换出来并在单核上运行不同的函数,等等。对于做某事的应用程序可能有用,例如,监控用户输入,但是关于它。

答案 1 :(得分:1)

您的问题是target=关键字现在设置为函数的返回值。您希望功能本身。 所以,现在实际发生的是:

  1. 致电Function1()
  2. t1的目标设置为None(返回值Function1()
  3. {li> 1-2重复了Function2()t2
  4. 启动t1t2个帖子,这两个帖子都以None为目标。这没有效果。
  5. 替换

    t1= Thread(target=Function1())
    t2= Thread(target=Function2())
    

    t1= Thread(target=Function1)
    t2= Thread(target=Function2)
    

    如果您希望在多个内核上并行执行Python代码,那么您唯一的希望就是multiprocessing。因为,如另一个答案所述,CPython解释器只允许同时执行一段Python代码(参见" Global Interpreter Lock")。 有很多关于此的信息可以在网上找到。