2017-05-10 3 views
0

Ich habe viele Artikel vor dem Posten meiner Frage gelesen, weil keine von ihnen darauf antworten, oder es war zu kompliziert für mein Wissen in Python. Ich versuche, mehr Post-Anfragen mit Multiprocessing zu senden und ich merke, dass wenn mein Raspberry Pi nicht mit dem Netzwerk zu verbinden, gelang es mir einige hatte ConnectionError: ('Connection Aborted.', gaierror(-2, 'Name or service not known')So behandeln Sie requests.exception.ConnectionError in Multiprocessing Python

Also das ich tue in meinem Code:

url = "https://some_url.org}" 
list.append(multiprocessing.Process(target=requests.post, args=(url,))) 

#doing this several times with several urls, then 

for element in list: 
    element.start() 
for element in list: 
    element.join() 

ich weiß, dass ich from requests.exceptions import ConnectionError zu tun haben, habe ich try:except: in der for Schleife eine einfache versucht, aber es funktioniert nicht, weil die Ausnahme in der Kind-Prozess befindet. Hier ist die Traceback:

Process Process-6: 
    self.run() 
    File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap 
    self._target(*self._args, **self._kwargs) 
    File "/usr/lib/python2.7/dist-packages/requests/api.py", line 94, in post 
    return request('post', url, data=data, json=json, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/requests/api.py", line 49, in request 
    return session.request(method=method, url=url, **kwargs) 
    self.run() 
    File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 457, in request 
    File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run 
    self._target(*self._args, **self._kwargs) 
    File "/usr/lib/python2.7/dist-packages/requests/api.py", line 94, in post 
    return request('post', url, data=data, json=json, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/requests/api.py", line 49, in request 
    return session.request(method=method, url=url, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 457, in request 
    resp = self.send(prep, **send_kwargs) 
    File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 569, in send 
    r = adapter.send(request, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 407, in send 

Vielen Dank im Voraus für jede Hilfe!

Antwort

0

Frage: Wie requests.exception.ConnectionError in Multiprozessing

Verwenden Sie einen wrapper für den requests.post(url) Anruf, zum Beispiel zu handhaben:

import multiprocessing as mp 
import requests 

def req_wrapper(url): 
    try: 
     requests.post(url) 
    except Exception as e: 
     print('Exception catched in req_wrapper:{}'.format(e)) 

if __name__ == '__main__': 
    url = "https://some_url.org" 
    p = mp.Process(target=req_wrapper, args=(url,)) 
    p.start() 
    p.join() 

Ausgang:
Ausnahme catched in req_wrapper :('Verbindung abgebrochen.', Gaierror (-2, 'Name oder eine Dienstleistung nicht bekannt'))

Getestet mit Python 3.4.2 und 2.7.9

+0

Ja, ich habe das bereits versucht und es funktioniert nicht, es scheint, dass ich meinen Elternprozess mit dem Kindprozess kommunizieren muss, der durch die Multiprocessing-Methode – GarennePb

+0

@GarennePb erstellt wurde: Meine Antwort wurde aktualisiert – stovfl

Verwandte Themen