简体   繁体   English

如何使用多重处理创建套接字对象并将其传递回父进程

[英]How to create a socket object using multiprocessing and pass it back to the parent process

I wish to create a sock.Socket object from a main program using multiprocessing to avoid blocking the main program if the socket is not available during the creation process. 我希望使用多重处理从主程序创建一个sock.Socket对象,以避免在创建过程中套接字不可用时阻塞主程序。 The socket gets created but can not be returned to the main program. 套接字已创建,但无法返回到主程序。

After some reading it seems that objects can not be shared between python processes. 经过一番阅读后,似乎无法在python进程之间共享对象。 It there a possible design pattern to circumvent this? 有没有可能避免这种情况的设计模式? Is multiprocessing suitable for this application or should I be considering another approach? 多重处理是否适合此应用程序,或者我应该考虑另一种方法?

You should keep it really simple and have a socket handler thread which: 您应该使其非常简单,并具有一个套接字处理程序线程,该线程:

  1. Opens the Socket, 打开插座,
  2. Retains ownership of it, 保留所有权,
  3. Handles it for your main program, ie on data arriving passes it to the parent via one of an event, pubsub or a callback, 为您的主程序处理它,即在数据到达时通过事件,pubsub或回调之一将其传递给父级,
  4. If the connection is lost either reopens it or lets the parent know and end cleanly, 如果连接断开,请重新打开它,或者让父母知道并彻底断开连接,
  5. On shutdown closes the socket for you. 关机时会为您关闭套接字。

Then everything becomes non-blocking. 然后,一切都变得无阻塞。 This is a much cleaner design pattern especially if you use pubsub. 这是一种更加简洁的设计模式,尤其是在使用pubsub的情况下。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用多重处理将对象从主流程传递到子流程 - How to pass object from main process to child process using multiprocessing python多处理将子进程中的di​​ct传递回父进程 - python multiprocessing pass dict from child process back to parent 如何在Python2.7.10中使用多处理创建子进程而不让子进程与父进程共享资源? - How to create a child process using multiprocessing in Python2.7.10 without the child sharing resources with parent? 如何终止多处理父流程? - How to Terminate Multiprocessing Parent Process? 如何将lastpass Vault对象传递给多处理流程工作者 - How to pass a lastpass Vault object into multiprocessing process worker 如何将未腌制的对象作为参数传递给multiprocessing.Process? - How to pass unpickled object as argument in multiprocessing.Process? 如何在python中使用多重处理在进程内部创建进程? - How to create a process inside a process using multiprocessing in python? 如何将接受的套接字从父进程传递到其子进程? - How can I pass an accepted socket from a parent process to its child process? 如何将队列字典传递给 multiprocessing.Process - How to pass a dictionary of Queues to multiprocessing.Process Asyncio和multiprocessing.Process-如何传递协程 - Asyncio and multiprocessing.Process- how to pass a coroutine?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM