2016-07-06 55 views
0

我是Python的新手,我努力解决一个问题的努力很大。我有三个程序在运行。其中一个目标是发送数据,另一个接收数据,第三个数据在中间(透明地)工作。第三个问题正在发生,我称之为delay_loss.py。Python - Multithreads调用相同的函数并行和独立运行

它必须先模拟数据包在发送到接收程序之前的延迟。

寻找很多我找到了一个解决方案(多线程),我不知道是最好的解决方案。由于delay_loss.py可以一次接收大量数据包,并且必须为每个随机时间选择一个模拟网络延迟的时间,所以我必须能够在选择随机时间后将每个数据包发送到接收程序这个数据包独立于其他数据包。

我想为此使用多线程,并且我认为我没有正确使用它,因为所有数据包都是在一段时间后同时发送的。线程似乎不会独立运行send_up()函数。 delay_loss.py的代码

部分如下图所示:

import threading 
import time 
from multiprocessing.dummy import Pool as ThreadPool 
... 
pool = ThreadPool(window_size) 
def send_up (pkt, time_delay, id_pkt): 

    time.sleep(time_delay) 

    sock_server.sendto(pkt, (C_IP, C_PORT)) 

def delay_pkt(pkt_recv_raw, rtt, average_delay, id_pkt): 

    x = random.expovariate(1/average_delay)   
    time_delay = rtt/(2+x) 

    pool.apply_async(send_up, [pkt_recv_raw, time_delay, id_pkt]) 

... 
delay_pkt(pkt_recv_raw, rtt, average_delay, id_pkt_recv) 
id_pkt_recv += 1 

如果任何人有什么我做错了一些想法。或者只是说,不要采取这种多线程方法来完成这项任务,这将有很大的帮助!

在此先感谢:)

回答

0

我找到了解决我的问题。我没有必要使用游泳池。 仅使用threading.Timer()函数就简单多了,如下所示:

t = threading.Timer(time_delay, send_up, [pkt_recv_raw, id_pkt])  
t.start() 
相关问题