我在python中有一个类函数。 我在许多不同的实例中运行该类
class worker():
def__init__(x,x)
def run():
instance1 = worker(x,x)
instance1.run()
instance2 = worker(x,x)
instance2.run()
问题是如果第一个instance1遇到thread.sleep()它会影响另一个instance2。我如何让他们独立。没有多进程就更好了谢谢!
不同的例子:
__author__ = 'user'
import time
class test():
def __init__(self, message):
self.message=message
def run(self):
while True:
print self.message
time.sleep(5)
if __name__ == '__main__':
test1 = test("PRINT-1")
test1.run()
test2 = test("PRINT-2")
test2.run()
答案 0 :(得分:1)
您可以使用 Celery 来运行并行任务。它很容易实现。
查看示例:
import time
from celery import task
@task
def make_task():
time.sleep(5)
return True
def execute_tasks():
result = group([make_task.s(), make_task.s()]).apply_async() # Execute tasks
print result.get() # Print the result
答案 1 :(得分:0)
看起来您已经关注了并行代码的教程。当前test
类中的任何内容都不会导致它并行运行,但只需进行一些小的调整,您就可以使用线程或进程执行此操作。
这是一个使该类继承自threading.Thread
的版本:
import threading
import time
class TestThreaded(threading.Thread):
def __init__(self, x, y):
super().__init__()
self.x = x
self.y = y
def run(self):
for i in range(self.x):
time.sleep(self.y)
print((i+1)*self.y)
你可以像这样使用它:
t0 = TestThreaded(8, 3)
t1 = TestThreaded(6, 4)
t0.start()
t1.start()
t0.join()
t1.join()
此示例中的两个线程将在24秒的时间内计为24。第一个线程将按三分计数,第二个线程将按四分计数。时间将在12秒和24秒紧密同步(取决于您的计算机及其在同一行上打印的确切时间)。
请注意,我们正在调用从start
类继承的Thread
方法,而不是我们在上面定义的run方法。线程代码将在生成的线程中为我们调用run
。
您可以使用multiprocessing.Process
作为基类而不是threading.Thread
来获得等效的多处理版本。唯一的区别是您将生成子进程而不是子线程。对于Python中的CPU限制工作,进程比线程更好,因为它们不受全局解释器锁的限制,这使得两个线程不可能同时运行Python代码。缺点是在启动期间以及在进程之间进行通信时开销较高。