Python正确的线程方式

时间:2017-04-17 15:06:56

标签: python multithreading

我是Python Threading,Threading的新手,我从未使用它。这就是我如何使用它。

我有一个类Source,我希望它的方法evaluate在一个线程中执行。 evaluate方法调用在类外定义的效用函数increment,该函数递增全局变量。应在关键部分中执行增量全局变量。此外,经过一些处理后,我需要暂停线程几秒钟。这就是我实现它的方式:

import threading
caseGT = threading.Lock()
GT = 0
def increment():
    with caseGT:
        GT = GT + 1

class Source:
    def evaluate(self):
        for (someCondition):
            ...
            ...
            increment()
            ...
            ...
            time.sleep(2)

我是如何调用方法评估的:

s = Source(....)
Thread(s.evaluate()).start()

我使用testdata获得了有效的结果。但我的问题是:

  1. 我想知道当许多线程同时工作时它是否能够正常工作?

  2. 此外,在这种情况下是否有更好的方法来编写使用线程?

1 个答案:

答案 0 :(得分:0)

我喜欢使用线程的方法是使用iterable来启动线程。

workers = []
for item in some_list:
    worker = Thread(target=some_func, args=(item,))
    workers.append(worker)
    worker.start()
for worker in workers:
    worker.join()

所以我想在你的上下文中你想要在Source中定义一个方法,它允许你传递一个iterable,然后使用来自该iterable的项作为参数启动线程。在您的上下文中只有一个参数转到evaluate方法,您的实现很好。但我认为,针对同一方法扩展到多个线程可能是这种用法的问题。