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脚本...因为我需要线程同时运行 有没有办法解决这个问题?
答案 0 :(得分:2)
如何同时运行两个函数(线程)?我不想使用多处理..
不幸的是,你不能同时拥有这两个(或者至少,你不能使用threading
同时运行这些东西)。这是inherent limitation of the CPython interpreter's GIL。
threading
唯一提供的是单核上下文切换,其中解释器将在单个核上运行一个函数,然后暂时将其交换出来并在单核上运行不同的函数,等等。对于做某事的应用程序可能有用,例如,监控用户输入,但是关于它。
答案 1 :(得分:1)
您的问题是target=
关键字现在设置为函数的返回值。您希望功能本身。
所以,现在实际发生的是:
Function1()
t1
的目标设置为None
(返回值Function1()
Function2()
和t2
。
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")。
有很多关于此的信息可以在网上找到。