首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类对象在线程时影响其他类对象的

类对象在线程时影响其他类对象的
EN

Stack Overflow用户
提问于 2014-06-18 09:25:30
回答 2查看 219关注 0票数 0

我在python中有一个类函数。我在许多不同的实例中运行这个类。

代码语言:javascript
复制
class worker():
    def__init__(x,x)
    def run():


instance1 = worker(x,x)
instance1.run()
instance2 = worker(x,x)
instance2.run()

问题是,如果第一次instance1遇到thread.sleep(),它会影响到另一个instance2。我怎样才能让他们独立。如果没有多进程,那就更好了谢谢!

不同的例子:

代码语言:javascript
复制
__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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-20 20:22:00

看上去你的并行代码教程已经被半途而废了。当前test类中没有任何东西会导致它并行运行,但是只要稍加调整,您就可以通过线程或进程来实现。

下面是一个使类从threading.Thread继承的版本

代码语言:javascript
复制
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)

你可以这样使用它:

代码语言:javascript
复制
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代码。缺点是,无论是在启动期间还是在进程间通信时,开销都较高。

票数 0
EN

Stack Overflow用户

发布于 2014-06-20 19:36:08

您可以使用芹菜运行并行任务。这很容易实现。

见一个例子:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24281832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档