2016-07-21 11 views
5

पर कॉल करता है मेरे पास पाइथन लिपि कई एसिंक अनुरोध करता है। मैं जिस एपीआई का उपयोग कर रहा हूं वह कॉलबैक लेता है।एसिंक को अवरुद्ध करने और प्रतीक्षा करने के लिए, कॉलबैक आधारित पायथन समारोह

मुख्य फ़ंक्शन कॉल चलाता है और मैं इसे सभी निष्पादन वापस आने तक निष्पादन को अवरुद्ध करना चाहता हूं।

यह प्राप्त करने के लिए मैं पायथन 2.7 के भीतर क्या उपयोग कर सकता हूं?

def run(): 
    for request in requests: 
     client.send_request(request, callback) 

def callback(error, response): 
    # handle response 
    pass 

def main(): 
    run() 

    # I want to block here 

उत्तर

2

मैंने पाया कि सबसे सरल, कम से कम आक्रामक तरीका 2.7 में threading.Event, उपलब्ध का प्रयोग है।

import threading 
import functools 

def run(): 
    events = [] 
    for request in requests: 
     event = threading.Event() 
     callback_with_event = functools.partial(callback, event) 
     client.send_request(request, callback_with_event) 
     events.append(event) 

    return events 

def callback(event error, response): 
    # handle response 
    event.set() 

def wait_for_events(events): 
    for event in events: 
     event.wait() 

def main(): 
    events = run() 
    wait_for_events(events) 
संबंधित मुद्दे