如何从子进程向父进程发出随机事件信号

时间:2019-01-15 19:25:48

标签: python-3.x process signals ipc

我正在编写一个能源市场模拟程序,其中房屋和外部事件会影响能源价格随时间变化的方式(每天x秒钟过去,变量会改变价格)。我要解决的最后一部分是满足我的设计规范。

我有一个所谓的“市场”过程,在该过程中,确定能源价格并确定价格,外部事件将对该价格产生影响。规范是外部过程是市场过程的子过程(即在市场内部创建),外部过程将发出随机事件信号,并且根据接收到的信号,市场会将不同的系数应用于能源价格。但是,在通过信号与外部与市场沟通方面,我遇到了一些困难。我自己在Windows上工作,但是此代码也应该在Linux上工作(理想情况下)。目前,我正在使用Pipe,尽管这比较简单,但这不是我必须要做的...

def market(number_of_days, number_of_homes, home_queue, home_counter, market_ready, clock_ready, temperature, season, market_connection):
    current_price = starting_price
    average_exchange = 0.0
    exchange = 0.0

    market_conn, external_conn = Pipe()

    e = Process(target = external, args=(number_of_days, external_conn, clock_ready))
    e.start()

    while clock_ready.wait(3 * delay):
        market_ready.value = False
        event = market_conn.recv()
        internal_effect = alpha_1 * (1/temperature[1]) + alpha_3 * average_exchange
        external_effect = event[1] * event[2]

        current_price = gamma * current_price + internal_effect + external_effect
    e.join()
    market_conn.close()
    external_conn.close()

这是当前的外部代码。

def external(number_of_days, external_connection, clock_ready):
    events = [["Nuclear fusion", 0.4, -0.3],
         ["Civil war", 0.5, 0.2],
         ["Reelection of Trump", 0.3, 0.3],
         ["Biofuel conversion for all vehicles", 0.3, -0.2],
         ["Climate change brings Ice Age", 0.35, 0.33]]

    for i in range(number_of_days):
        event = False
        rand = random.random()

        if rand >= 0.75:
        event = True

        if event:
            external_connection.send(events[random.randint(0, len(events) - 1)])
        else:
            external_connection.send(["None", 0, 0])

我对使用信号的经验不是很丰富,所以我可以说的是,External会向Market发送两个信号之一,基于此,Market将从我个人定义的列表中随机选择一个事件。收到信号后,我可以绕过后者,但是我不知道如何正确发送接收信号。

0 个答案:

没有答案