Ich benutze Python 3.4.2 mit Cx_freeze 4.3.4 (alle 64 Bit) das Programm, das ich erstellt hat, funktioniert gut unter Python, aber wenn eingefroren, beginnt es mir Probleme zu geben mitcx_freeze mit sys.stdout.flush() und Multiprozessing
sys.stdout.flush()
Attribute: ‚TypeNone‘ Objekt nicht attribute'flush‘
mit Methoden empfohlen hier hat, habe ich es geschafft, das Problem zu einer Traceback-Nachricht zu reduzieren, die auf blinkt Der Bildschirm für ein paar Sekunden vor dem Verschwinden. Wie kann ich dieses Problem beheben? Windows Error Screen shot
Die stdout.flush nur aufgerufen wird, wenn es den BREAK Befehl im Multiprozessing Abschnitt des Codes entspricht. Vorschläge, den Fehler entweder zu meiner Protokolldatei zu unterdrücken/umzuleiten oder die Ursache des Problems zu lösen, wären sehr willkommen.
Karl
class vDiags(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.wm_title(self, "Diagnostics")
do stuff ............
start_job()
def pinger(job_q, mdic, ping, result_q):
devnull = open(os.devnull, 'w')
logger.info("Starting Pinger")
while True:
ip = job_q.get()
if ip is None:
logger.info("No IP address, finishing early")
break
test_result = {}
try:
if is_valid_ipv4_address(ip) is True:
do more stuff.........
def start_job():
logger.info("Starting start_Job")
pool_size = Variables.poll_size
logger.info("Pool size %s" % pool_size)
jobs = multiprocessing.Queue()
logger.info("Jobs %s" % jobs)
results = multiprocessing.Queue()
logger.info("results %s" % results)
manager = multiprocessing.Manager()
logger.info("manager %s" % manager)
manager_test_dict = manager.dict()
logger.info("manager_test_dict %s" % manager_test_dict)
for key, val in Variables.test_dic.items():
manager_test_dict[key] = val
pool = [multiprocessing.Process(target=pinger, args=(jobs, manager_test_dict, Variables.ping, results))
for i in range(pool_size)
]
for p in pool:
logger.info("p in pool %s" % p)
p.start()
for i in Variables.source_ip:
logger.info("Source IP:> %s" % i)
jobs.put(i)
for p in pool:
logger.info("p in pool (jobs) %s" % p)
jobs.put(None)
for p in pool:
logger.info("p in pool (join) %s" % p)
p.join()
logger.info("Move Results to new Variable")
logger.info(results.qsize())
while not results.empty():
Variables.test_result_raw = updatetree(Variables.test_result_raw, results.get())
logger.info("Finished start_Job")
class fakestd(object):
def write(self, string):
logger.info("write %s" %string)
pass
def flush(self):
logger.info("Flush %s " % self)
pass
if __name__ == '__main__':
# ********** Main App **********
sys.stdout = fakestd()
sys.stderr = fakestd()
multiprocessing.freeze_support()
logger.info("tkinter Installed Version %s" % tk.TkVersion)
app = vDiags()
app.geometry("1280x720")
app.mainloop()
# ********** Main App **********