この記事では主に Python スレッド プール threadpool の使用方法を詳しく紹介します。興味のある方は参考にしてください。私は現在、ビデオ機器管理プロジェクトに取り組んでいます (カメラ、DVR、NVR、など)、デバイス情報の完了、デバイス ステータスのプッシュ、デバイス ストリーム アドレスのプッシュなどが含まれます。同時にインポートされるデバイスが多数あり、デバイスの検出に単一のスレッドが使用される場合、デバイスの数が増えると、さらに大きな遅延が発生するため、この問題を処理するにはマルチスレッドを検討してください。
Python 言語を使用してスレッド プールを自分で実装することも、サードパーティのパッケージ threadpool スレッド プール パッケージを使用することもできます。このトピックでは、主に threadpool の使用方法とその特定の実装について説明します。
1. インストール:pip installthreadpool
を使用して
をインストールします (1) threadpool モジュールを導入します(2) スレッド関数を定義します (3) スレッドプール thread pool を作成します。 ThreadPool() (4) スレッドプールの処理が必要なタスク、つまり threadpool.makeRequests()
を作成します。 (5) 作成した複数のタスクをスレッドプールに入れます、threadpool.putRequest (6) すべてのタスクが adpool で処理されるまで待ちます。 pool()
import threadpool def ThreadFun(arg1,arg2): pass def main(): device_list=[object1,object2,object3......,objectn]#需要处理的设备个数 task_pool=threadpool.ThreadPool(8)#8是线程池中线程的个数 request_list=[]#存放任务列表 #首先构造任务列表 for device in device_list: request_list.append(threadpool.makeRequests(ThreadFun,[((device, ), {})])) #将每个任务放到线程池中,等待线程池中线程各自读取任务,然后进行处理,使用了map函数,不了解的可以去了解一下。 map(task_pool.putRequest,request_list) #等待所有任务处理完成,则返回,如果没有处理完,则一直阻塞 task_pool.poll() if __name__=="__main__": main()
threadpoolは具体的には次のように定義されています:
class ThreadPool: """A thread pool, distributing work requests and collecting results. See the module docstring for more information. """ def __init__(self, num_workers, q_size=0, resq_size=0, poll_timeout=5): pass def createWorkers(self, num_workers, poll_timeout=5): pass def dismissWorkers(self, num_workers, do_join=False): pass def joinAllDismissedWorkers(self): pass def putRequest(self, request, block=True, timeout=None): pass def poll(self, block=False): pass def wait(self): pass
以上がPython スレッド プール スレッドプールの使用法に関する記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。