2
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脚本进行性能测试...为此我需要线程同时运行有什么办法可以解决这个问题吗?

4

2 回答 2

2

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

不幸的是,你不能真正同时拥有这两个(或者至少,你不能真正同时使用 运行事情threading)。这是CPython 解释器 GIL 的固有限制

唯一threading提供的是单核上下文切换,其中解释器将在单核上运行一个函数,然后临时将其换出并在单核上运行不同的函数,等等。这可能对执行某些操作的应用程序有用,例如,监视用户输入,仅此而已。

于 2016-03-09T12:01:12.173 回答
2

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

  1. 称呼Function1()
  2. t1将其目标设置为None(返回值Function1()
  3. 1-2 重复Function2()t2
  4. 启动t1t2线程,两者都None作为目标。这没有效果。

代替

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

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

如果您想在多个内核上并行执行 Python 代码,那么您唯一的希望是multiprocessing. 因为,正如另一个答案中提到的,CPython 解释器只允许同时执行一段 Python 代码(请参阅“全局解释器锁”)。网上有很多关于这方面的信息。

于 2016-03-09T12:05:11.723 回答