मेरे पास एक फ़ंक्शन get_data(request)
है जो किसी सर्वर को कुछ डेटा अनुरोध करता है। हर बार जब यह फ़ंक्शन कहा जाता है, तो यह डेटा को किसी भिन्न सर्वर से अनुरोध करता है। उन सभी को एक ही प्रतिक्रिया वापस करनी चाहिए।फ़ंक्शन को असीमित रूप से कई बार निष्पादित करने के लिए और पहले परिणाम
मैं जितनी जल्दी हो सके प्रतिक्रिया प्राप्त करना चाहता हूं। मुझे एक ऐसा फ़ंक्शन बनाना होगा जो कई बार get_data
पर कॉल करे, और यह पहली प्रतिक्रिया देता है।
संपादित करें:
मैं multithreading.Pipe() का उपयोग कर की एक विचार के साथ आया था, लेकिन मैं महसूस कर रही है कि यह एक बहुत बुरा जिस तरह से यह हल करने के लिए है, तुम्हें क्या लगता है ?:
हैdef get_data(request, pipe):
data = # makes the request to a server, this can take a random amount of time
pipe.send(data)
def multiple_requests(request, num_servers):
my_pipe, his_pipe = multithreading.Pipe()
for i in range(num_servers):
Thread(target = get_data, args = (request,his_pipe)).start()
return my_pipe.recv()
multiple_requests("the_request_string", 6)
मुझे लगता है कि यह ऐसा करने का एक बुरा तरीका है क्योंकि आप सभी धागे पर एक ही पाइप गुजर रहे हैं, और मुझे वास्तव में पता नहीं है लेकिन मुझे लगता है कि यह बहुत असुरक्षित होना चाहिए।
सबसे सरल तरीका है जिसे मैं सोच सकता हूं कि पायथन 3 के '[concurrent.futures.as_completed'] द्वारा उत्पादित पहले मान का उपयोग करना है (https://docs.python.org/3.2/library/concurrent.futures.html # concurrent.futures.as_completed) – roippi
शायद आप थ्रेड निष्पादन के परिणाम लौटने के लिए पाइथन थ्रेड सुरक्षित कतारों का उपयोग कर सकते हैं। यह एक सुरक्षित और अवरुद्ध तरीका नहीं है। कृपया [link] (https://docs.python.org/2/library/queue.html) – Andy
@roippi पर एक नज़र डालें, क्या कृपया मुझे उस फ़ंक्शन का उपयोग करने का एक सरल उदाहरण मिल सकता है? मुझे यह समझने में कठिनाई हो रही है कि यह कैसे काम करता है ... – Jorky10