Ich versuche, eine globale Liste zu verwenden, die angehängt werden kann, wenn ein Thread/Prozess eine Aufgabe beendet. Mein Haupt-Thread kann davon lesen, aber durch die Funktion kann es nicht anhängen. Im Grunde mache ich Anfragen, um funktionierende Proxies zu bekommen und versuche dann, sie in der Liste zu speichern und dann die Liste am Ende auszudrucken. Ich habe so viel wie möglich ausgeschnitten.Python 3.5 globale Variable wird nicht anhängen
goodProxyList = ["test"]
def testProxy(x):
global goodProxyList
try:
test = requests.get('http://someurl.com/', proxies=proxies, timeout=10)
if test.status_code == 200:
goodProxyList.append(x)
else:
print("Something went wrong! :/" + " From PID: " + str(pid))
except:
print("SOMETHING WENT VERY WRONG" + " From PID: " + str(pid))
if __name__ == '__main__':
##Setup Stuff happens
p=Pool(2)
p.map(testProxy, proxyList)
for i in goodProxyList:
print(i)
Auch wenn ich goodProxyList.append (x) zu goodProxyList.append ("Alles"), die letzten 2 Zeilen noch onlt Ausgabe "test" ändern. Was mache ich falsch?
EDIT:
Ich habe die Antwort durch Hilfe von brianpck gefunden. Wie er sagt, scheinen Prozesse anders als Threads zu funktionieren. Mein Wechsel zu einem Pool-Thread funktioniert jetzt einwandfrei.
#p=Pool(2)
#p.map(testProxy, proxyList)
with concurrent.futures.ThreadPoolExecutor() as executor:
executor.map(testProxy, proxyList)
Was genau meinen Sie, "kann nicht daran anhängen"? Dies sollte gut funktionieren (und in der Tat ist es nicht einmal notwendig, 'global goodProxyList' explizit zu deklarieren). – brianpck
Sorry, ich hätte sagen sollen, dass die Ausgabe der letzten 2 Zeilen immernoch nur" test "ist und sonst nichts. – user3406647
@brianpck zum Anhängen an eine Variable/Liste außerhalb des Funktionsumfangs müssen Sie 'global goodProxyList' deklarieren. – r0xette