在 class Python 的方法中线程化两个函数
Threading two functions inside a method of a class Python
我想在 Python 中同时 运行 一个 class 方法中的 2 个函数。我尝试使用 threading
模块,但它不起作用。我的示例代码如下:
import os, sys
import threading
from threading import Thread
class Example():
def __init__(self):
self.method_1()
def method_1(self):
def run(self):
threading.Thread(target = function_a(self)).start()
threading.Thread(target = function_b(self)).start()
def function_a(self):
for i in range(10):
print (1)
def function_b(self):
for i in range(10):
print (2)
run(self)
Example()
如果执行上述代码,它只会先打印所有 1
,然后再打印所有 2
。但是,我想要的是同时打印 1
和 2
。因此,所需的输出应该是它们的混合。
threading
模块是否能够做到这一点?如果没有,哪个模块可以做到这一点?如果有人知道如何解决它,请告诉我。赞赏!!
您需要以不同方式传递参数。现在你实际上是在 threading.Thread
初始化调用中执行你的函数,而不是创建一个执行函数的线程。
如果需要函数作为参数,请始终只使用 function
。如果你写 function()
,Python 将不会将实际函数作为参数传递,而是当场执行函数并使用 return 值代替。
def run(self):
threading.Thread(target = function_a, args=(self,)).start()
threading.Thread(target = function_b, args=(self,)).start()
这里是:
import os, sys
import threading
from threading import Thread
import time
class Example():
def __init__(self):
self.method_1()
def method_1(self):
def run(self):
threading.Thread(target = function_a, args = (self,)).start()
threading.Thread(target = function_b, args = (self,)).start()
def function_a(self):
for i in range(10):
print (1)
time.sleep(0.01) # Add some delay here
def function_b(self):
for i in range(10):
print (2)
time.sleep(0.01) # and here
run(self)
Example()
你会得到这样的输出:
1
2
1
2
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
我想在 Python 中同时 运行 一个 class 方法中的 2 个函数。我尝试使用 threading
模块,但它不起作用。我的示例代码如下:
import os, sys
import threading
from threading import Thread
class Example():
def __init__(self):
self.method_1()
def method_1(self):
def run(self):
threading.Thread(target = function_a(self)).start()
threading.Thread(target = function_b(self)).start()
def function_a(self):
for i in range(10):
print (1)
def function_b(self):
for i in range(10):
print (2)
run(self)
Example()
如果执行上述代码,它只会先打印所有 1
,然后再打印所有 2
。但是,我想要的是同时打印 1
和 2
。因此,所需的输出应该是它们的混合。
threading
模块是否能够做到这一点?如果没有,哪个模块可以做到这一点?如果有人知道如何解决它,请告诉我。赞赏!!
您需要以不同方式传递参数。现在你实际上是在 threading.Thread
初始化调用中执行你的函数,而不是创建一个执行函数的线程。
如果需要函数作为参数,请始终只使用 function
。如果你写 function()
,Python 将不会将实际函数作为参数传递,而是当场执行函数并使用 return 值代替。
def run(self):
threading.Thread(target = function_a, args=(self,)).start()
threading.Thread(target = function_b, args=(self,)).start()
这里是:
import os, sys
import threading
from threading import Thread
import time
class Example():
def __init__(self):
self.method_1()
def method_1(self):
def run(self):
threading.Thread(target = function_a, args = (self,)).start()
threading.Thread(target = function_b, args = (self,)).start()
def function_a(self):
for i in range(10):
print (1)
time.sleep(0.01) # Add some delay here
def function_b(self):
for i in range(10):
print (2)
time.sleep(0.01) # and here
run(self)
Example()
你会得到这样的输出:
1
2
1
2
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1