Maison  >  Article  >  développement back-end  >  articles sur l'utilisation du pool de threads python

articles sur l'utilisation du pool de threads python

不言
不言original
2018-05-02 14:29:342795parcourir

Cet article présente principalement en détail l'utilisation du pool de threads Python, qui a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

Je travaille actuellement sur un projet de gestion de périphériques vidéo, les périphériques incluent (caméra). , DVR, NVR, etc.), y compris l'achèvement des informations sur l'appareil, la transmission de l'état de l'appareil, l'envoi de l'adresse du flux de l'appareil, etc. Si un grand nombre d'appareils sont importés en même temps, si un seul thread est utilisé pour la détection des appareils, alors en raison au grand nombre de périphériques S'il y en a trop, cela entraînera un retard important, pensez donc au multithreading pour gérer ce problème.

Vous pouvez utiliser le langage python pour implémenter le pool de threads vous-même, ou vous pouvez utiliser le package tiers threadpool thread pool. Cette rubrique présente principalement l'utilisation du pool de threads et son implémentation spécifique.

1.Installation

Utiliser l'installation :

pip installthreadpool

2. Utilisez

(1) Présentez le module threadpool
(2) Définissez la fonction de thread
(3) Créez un pool de threads threadpool.ThreadPool()
(4) Créer un besoin Les tâches gérées par le pool de threads sont threadpool.makeRequests()
(5) Mettez les multiples tâches créées dans le pool de threads, threadpool.putRequest
(6) Attendez que toutes les tâches soient traitées theadpool.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()

Ce qui précède est un processus d'utilisation du pool de threads spécifique
La définition spécifique du pool de threads est la suivante :

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

La section suivante présentera l'ensemble du processus ci-dessus et chaque fonction en détail : pool de threads python (implémentation)

Connexe recommandations :

Implémentation du pool de threads python threadpool

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn