Pyinstaller и Pyro4
Я создал простой пиро-сервер и попытался упаковать его с помощью pyinstaller, но всякий раз, когда я пытаюсь запустить исполняемый файл, вызывая "./main --s", а затем на другой вкладке терминала "./main --c", код дает мне правильный вывод, но когда я смотрю на монитор активности, постоянно появляются новые экземпляры моего исполняемого файла. Прерывание пользователем экземпляров оболочки не оказывает никакого влияния, и эти процессы продолжают порождаться, пока я полностью не перезапущу свою систему.
Вот мой основной скрипт, который я компилирую как исполняемый файл:
from face_id.face_id import server, client
from multiprocessing import freeze_support
import sys
if __name__ == "__main__":
freeze_support()
if sys.argv[1] == '--s':
server_start()
elif sys.argv[1] == '--c':
client_test()
вот определения классов для пиро:
from __future__ import print_function
import Pyro4
import time
import sys
import cv2
sys.path.append('./')
import face_id.face as face
@Pyro4.expose
@Pyro4.behavior(instance_mode="single")
class FaceIDServer(object):
def __init__(self):
pass
def test_server(self):
return 'hello world'
class FaceIDClient:
def __init__(self):
sys.excepthook = Pyro4.util.excepthook
self.server = Pyro4.Proxy("PYRONAME:face_id.server")
def test(self):
print(self.server.test_server())
def server_start():
Pyro4.Daemon.serveSimple(
{
FaceIDServer: "face_id.server"
},
ns=True)
def client_test():
client = FaceIDClient()
client.test()
Кроме того, эти процессы, которые запускаются, используют гораздо больше процессорного процента, чем сценарий при запуске через python. Если я смотрю монитор активности или 'top -u', я вижу, что новый процесс запускается каждые пару секунд. Эти проблемы становятся намного хуже, когда я использую свой полный код приложения вместо этого простого примера.
Кроме того, да, я использую новейший pyinstaller, я пытался заморозить многопроцессорность, сервер имен работает правильно, но независимо от того, что я делаю, эта проблема сохраняется.