Example #1
0
# def main():
# The "freeze_support()" line can be omitted if the program
# 启动进程时,必须在if __name__ == '__main__': 方法中
if __name__ == '__main__':

    change_dict = {
        # 'r':(30,'g'),
        # 'y':(3,'r'),
        # 'g':(45,'y'),
        'r': (4, 'g'),
        'y': (3, 'r'),
        'g': (5, 'y'),
    }

    shared_ns = Manager().Namespace()
    shared_ns.color = 'g'

    lighter_process = Process(target=start_work, args=(shared_ns, change_dict))

    lighter_process.start()
    # join会让父进程同步阻塞,等待子进程
    # lighter_process.join()
    # AttributeError: 'ForkAwareLocal' object has no attribute 'connection'
    # https://www.cnblogs.com/wangqiaomei/p/5682669.html
    # 主进程停止了,子进程要访问主进程的变量,则会报此错误
    # 主进程和子进程都在执行,主进程里有个字典,子进程要修改这个字典。
    # 进程和进程之间要通信的话,需要创建连接的。相当于两边都写上一个socket,进程之间通过连接进行操作。
    # 主进程执行到底部,说明执行完了,会把它里面的连接断开了。
    # 主进程把连接断开了,子进程就连接不上主进程。
    # 如果在底部写停10秒,主进程就停止下来,并没有执行完。主进程没有执行完,连接还没有断开,那子进程就可以连接它了。