在Python中处理后台网络操作

时间:2013-05-09 15:44:03

标签: python multithreading networking

让我先说一下,我并不完全熟悉Python,但在使用其他语言编程方面有丰富的经验。

我正在开发一种工具,允许我将数据包注入TCP网络流。我的想法是我的代码充当两个网络端点之间的透明代理。我有代码工作,代理工作,我甚至可以解析数据包和自动注入(即检测特定状态和修改/注入数据包),但我的最终目标是涉及用户交互。

我正在尝试解决的问题是如何在后台运行网络内容,同时命令行界面会提示用户输入命令。当给出命令时,它可能会执行某种注入。

在C#中,我将使用后台工作程序任务或线程处理此问题,然后使用CLI触发事件,但我不熟悉这种设计通常如何在Python中实现。我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

如果您熟悉具有后台进程和触发事件的模式,则可以在python中采用相同的方法。查看Multiprocessing module以创建后台进程(从而避免Global Intepreter Lock问题)并使用Pipe将消息发送到后台进程以触发事件

或者你可以看一下像Trellis这样的包来采取事件驱动的方法,或者也许是Twisted框架。我不能代表其中任何一个,因为我从未使用它们。

希望这有帮助!

答案 1 :(得分:1)

线程是要走的路(背景工作者不是同样的事情吗?)。像这样:

from Queue import Queue
import threading

queue = Queue()

def job():
    while True:
        command = queue.get() # <-- waits until something is in the queue
        # do something with the command

# main thread
t = threading.Thread(target=job)
t.daemon = True
t.start()

while True:
    command = raw_input("---> ")
    queue.put(command)