У меня есть версия программы A, которая вызывает execve () для выполнения другой версии программы B, сохраняя тот же PID.
Эта программа A имеет объект сокета, и мы хотели бы, чтобы другая программа B получила доступ к тот же сокет для отправки некоторых данных в установленное соединение.
Проблема в том, что я не нашел способа успешно восстановить сериализованный сокет, я сохраняю его в файл, открывая файл снова в новая программа B, но это не тот же объект, неинициализирован и не имеет никаких установленных атрибутов, я использовал укроп и маринад.
Существует ли безопасный способ передачи переменных объектов при вызове exe c ()? Или способ получить ссылку на указатель объекта и передать этот указатель вперед?
Версия A:
#!/bin/env python
import os
import dill as pickle
import socket
print "Version A"
print os.getpid()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1",80))
with open('file1.pickle', 'wb') as handle:
pickle.dump(s, handle)
os.execlp('python', 'python', 'verB.py')
Версия B:
#!/bin/env python
import os,pdb,sys
import dill as pickle
import socket
print "Version B"
print os.getpid()
infile = open('file1.pickle','rb')
infile.seek(0, 0)
s = pickle.load(infile)
infile.close()
s.send("mymessage")
s.close()
Разъем версии B s
неинициализирован, как восстановить сокет?