Erste Post hier, Hallo an alle.Arbeitskraft, die Verbindung zum Server herstellt, aber auf dem Client mit Multiprocessing-Paket (Python 2.7)
Ich habe ein Problem mit dem Multiprocessing-Paket mit Python 2.7. Ich möchte einige Prozesse parallel auf einem Server laufen lassen; Sie verbinden sich, aber sie werden stattdessen lokal ausgeführt.
Dies ist der Code, den ich auf dem Server verwenden (Ubuntu 14.04):
from multiprocessing import Process
from multiprocessing.managers import BaseManager
from multiprocessing import cpu_count
class MyManager(BaseManager):
pass
def server():
mgr = MyManager(address=("", 2288), authkey="12345")
mgr.get_server().serve_forever()
if __name__ == "__main__":
print "number of cpus/cores:", cpu_count()
server = Process(target=server)
server.start()
print "server started"
server.join()
server.terminate()
während dies der Code, der auf dem Client (Mac OS 10.11) läuft, ist:
from multiprocessing import Manager
from multiprocessing import Process
from multiprocessing import current_process
from multiprocessing.managers import BaseManager
from math import sqrt
class MyManager(BaseManager):
pass
def worker(address, port, authkey):
mgr = MyManager(address=(address, port), authkey=authkey)
try:
mgr.connect()
print "- {} connected to {}:{}".format(current_process().name, address, port)
except:
print "- {} could not connect to server ({}:{})".format(current_process().name, address, port)
current_process().authkey = authkey
for k in range(1000000000):
sqrt(k * k)
if __name__ == "__main__":
# create processes
p = [Process(target=worker, args=("xx.xx.xx.xx", 2288, "12345")) for _ in range(4)]
# start processes
for each in p:
each.start()
# join the processes
for each in p:
each.join()
Die für Schleife
das ist in der Worker-Funktion ist nur, um die Arbeiter viel verarbeiten lassen, damit ich ihre Aktivität überwachen kann in Aktivitätsmonitor oder mit top. Das Problem ist, dass die Prozesse verbinden (in der Tat, wenn ich eine falsche Adresse sie nicht) aber sie werden auf dem lokalen Rechner ausgeführt, wie ich die Server-CPUs Leerlauf sehen, während die lokalen CPUs gehen alle zu 100% . Bin ich etwas falsch?
Sie beginnen Ihre Arbeiter vor Ort, was haben Sie erwartet? oO – MisterMiyagi