استخدم بشكل مناسب وضع المستهلك للمنتجين استخدام قوائم قوائم متعددة الخيوط لدعم أنماط متعددة للمستهلكين العاديين لدعم وضع قائمة انتظار الاستهلاك الأولوية لدعم وضع حد الدفق
pip install thread_worker
Worker متعدد الخيوط العامل
عمل قائمة انتظار الاستهلاك الأولوية PriorWorker
الحد LimitWorker الحالي لعامل العمل
التهيئة ، تتوفر المعلمات التالية
def __init__ ( self , consumer_func , consumer_count , logger , block , timeout ):
'''
@params consumer_func consumer_func default None
@params consumer_count Work quantity
@params logger You can customize the logger. The default is logging
@params block You can set whether the thread ends when the queue is empty
By default, the thread will end when the queue is empty and the thread task is completed
You can set it to true to enable work to monitor tasks all the time
@params timeout The timeout for obtaining data in the queue is 5S by default, that is, if the data is not obtained within 5S, it will end
''' مستهلك _func وظيفة المستهلك الافتراضيات على لا شيء. إذا تمت إضافته ، يُعتبر أن المستهلك قد بدأ أولاً ثم يتم إنشاء المهمة. Consumer_count يتحكم في عدد المستهلكين الموجودين هناك.
المسجل هو تعيين إخراج السجل
الكتلة هي التحكم في ما إذا كان وضع الحظر. إذا تم ضبطه على TRUE ، فسيستمر تنفيذ مؤشر ترابط العمل حتى تنتهي العملية الرئيسية. خلاف ذلك ، عندما تكون قائمة الانتظار فارغة واكتملت مهام الخيط ، سينتهي العمل.
المهلة هي مهلة الحصول على بيانات من قائمة الانتظار. المهلة الافتراضية هي 5s. إذا كانت الانضمام صحيحة ، فسيأخذ العمل الانضمام إلى خطأ مرة أخرى وإنهاء العمل الحالي.
واحد هو تشغيل المستهلك أولاً ثم إنشاءه. يمكن أن يولد بشكل مستمر ويستهلكه. إنه مناسب لمهام مسح الوكلاء السلبي أو العملية الرئيسية تتحكم في العالم ثم يولد المهام.
أحدهما هو إنشاء جميع المهام في وقت واحد وتسليمها إلى المستهلك لتشغيل المهمة المناسبة لإنشاء الاختبارات في وقت واحد ثم تشغيلها.
WorkWork put بيانات المثيلWork.is_end() from thread_worker import Worker
import requests
import time
def consumer ( iid ):
url = "https://www.baidu.com/{0}" . format ( iid )
resp = requests . get ( url = url )
print ( resp . request . url )
# 不需要阻塞
w = Worker ( consumer , consumer_count = 1 , block = False )
for iid in range ( 10 ):
w . put ( iid )
# 这里通过 is_end 方法来阻塞程序
while not w . is_end ():
time . sleep ( 3 ) مثل العمل الافتراضي ، هناك معلمة limit_time إضافية عند إنشائها. من خلال تعيين وقت وحدة limit_time و consumer_count ، فإنه يتحكم في عدد الأعمال التي يتم تنفيذها في غضون وقت الوحدة.
limit_time الافتراضي هو 1S
from thread_worker import LimitWorker
import requests
import time
def consumer ( iid ):
url = "https://www.baidu.com/{0}" . format ( iid )
resp = requests . get ( url = url )
print ( resp . request . url )
# limit_time 是limit_time 秒内有 consumer_count个消费者
w = LimitWorker ( consumer , consumer_count = 1 , block = False , limit_time = 3 )
for iid in range ( 10 ):
w . put ( iid )
# 这里通过 is_end 方法来阻塞程序
while not w . is_end ():
time . sleep ( 3 )الناتج مثل هذا. سيتم إرسال طلب فقط كل 3 ثوان ، أي أنه سيتم التحكم في التردد.
send: 2022-04-08 10:13:04 904000
https://www.baidu.com/0
send: 2022-04-08 10:13:07 904000
https://www.baidu.com/1
send: 2022-04-08 10:13:10 904000
https://www.baidu.com/2
send: 2022-04-08 10:13:13 904000
https://www.baidu.com/3
send: 2022-04-08 10:13:16 904000
https://www.baidu.com/4
send: 2022-04-08 10:13:19 904000
https://www.baidu.com/5
send: 2022-04-08 10:13:22 904000
https://www.baidu.com/6
send: 2022-04-08 10:13:25 904000
https://www.baidu.com/7
send: 2022-04-08 10:13:28 904000
https://www.baidu.com/8
send: 2022-04-08 10:13:31 904000
https://www.baidu.com/9
في هذا السيناريو ، سيتم استخدام الوكلاء السلبيين أو بعض العمليات الرئيسية في البرامج التي تعمل لفترة طويلة. الفرق هو أن طريقة العمل. IS_END () غير مطلوبة لحظر الكتلة أو ضبط الكتلة. الافتراضي صحيح.
from thread_worker import Worker
import requests
import time
def consumer ( iid ):
url = "https://www.baidu.com/{0}" . format ( iid )
resp = requests . get ( url = url )
print ( resp . request . url )
# block默认就是True的
w = Worker ( consumer , consumer_count = 1 )
for iid in range ( 10 ):
w . put ( iid )
# 手动阻塞
while True :
pass