我在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()发布于 2014-06-20 20:22:00
看上去你的并行代码教程已经被半途而废了。当前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代码。缺点是,无论是在启动期间还是在进程间通信时,开销都较高。
发布于 2014-06-20 19:36:08
您可以使用芹菜运行并行任务。这很容易实现。
见一个例子:
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 resulthttps://stackoverflow.com/questions/24281832
复制相似问题