2015-12-09 13 views
6

मेरे पास एक फ़ंक्शन 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) 

मुझे लगता है कि यह ऐसा करने का एक बुरा तरीका है क्योंकि आप सभी धागे पर एक ही पाइप गुजर रहे हैं, और मुझे वास्तव में पता नहीं है लेकिन मुझे लगता है कि यह बहुत असुरक्षित होना चाहिए।

+5

सबसे सरल तरीका है जिसे मैं सोच सकता हूं कि पायथन 3 के '[concurrent.futures.as_completed'] द्वारा उत्पादित पहले मान का उपयोग करना है (https://docs.python.org/3.2/library/concurrent.futures.html # concurrent.futures.as_completed) – roippi

+0

शायद आप थ्रेड निष्पादन के परिणाम लौटने के लिए पाइथन थ्रेड सुरक्षित कतारों का उपयोग कर सकते हैं। यह एक सुरक्षित और अवरुद्ध तरीका नहीं है। कृपया [link] (https://docs.python.org/2/library/queue.html) – Andy

+0

@roippi पर एक नज़र डालें, क्या कृपया मुझे उस फ़ंक्शन का उपयोग करने का एक सरल उदाहरण मिल सकता है? मुझे यह समझने में कठिनाई हो रही है कि यह कैसे काम करता है ... – Jorky10

उत्तर

1

मुझे लगता है कि redis rq इसके लिए अच्छा होगा। get_data एक नौकरी है जिसे आपने छह बार कतार में रखा था। नौकरियां एसिंक को निष्पादित करती हैं, दस्तावेज़ों में आप यह भी पढ़ सकते हैं कि परिणामों के साथ कैसे कार्य करना है।

संबंधित मुद्दे