Python线程正确的方法

Python线程正确的方法,python,multithreading,Python,Multithreading,我不熟悉Python线程,也不熟悉线程,我从未使用过它。我就是这么用的 我有一个类Source,我希望它的方法evaluate在线程中执行。evaluate方法调用在类外部定义的实用函数increment,该函数递增全局变量。递增全局变量应在关键部分执行。另外,在一些处理之后,我需要暂停线程几秒钟。我就是这样实施的: import threading caseGT = threading.Lock() GT = 0 def increment(): with caseGT:

我不熟悉Python线程,也不熟悉线程,我从未使用过它。我就是这么用的

我有一个类
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)
这就是我调用方法evaluate的方式:

s = Source(....)
Thread(s.evaluate()).start()
我正在使用testdata获得有效的结果。但我的问题是:

  • 我想知道当许多线程同时工作时,它是否能正常工作

  • 另外,在这种情况下,有没有更好的方法来编写和使用线程


  • 我喜欢使用线程的方式是使用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
    方法,您的实现就可以了。但我认为,对于同一方法,扩展到多个线程可能是一个问题。

    为什么要保留线程的记录,在我的情况下,我只需要线程开始工作,增加全局变量并执行dieI主要是为了使用
    join
    方法,以便它们正确地阻塞并在完成时终止。您听说过python GIL吗?不,从来没有听说过使用线程的用例是什么?性能还是并行执行效果?问题是我有数千个RDF文档的URL,我必须下载这些RDF文档。有些可能需要时间,而另一些可能很快。睡眠时间是这样的,对于一个特定的支付级别域,它会等待一分钟,然后在同一个PLD上执行调用。因此,线程的使用是为了允许同时下载多个文件,并防止阻止下载影响其他SPLZ,请从concurrent.futures导入ThreadPoolExecutor中调查并发模块
    ,或者从
    多处理.dummy