|
发表于 2023-6-3 21:21:29
|
显示全部楼层
你可以在项目1的main.py中使用multiprocessing模块来启动一个新进程,并将需要传递的参数作为参数传给该进程。如下所示:
- import multiprocessing
- from logger_send import Sender
- if __name__ == '__main__':
- signal = ["info", "程序启动"]
- sender_process = multiprocessing.Process(target=Sender, args=(signal,))
- sender_process.start()
复制代码
在上述代码中,我们首先导入了multiprocessing模块和Sender类,然后在if __name__ == '__main__':语句块中创建了一个名为signal的列表,里面存储了需要传递的参数。接下来,我们利用multiprocessing.Process函数创建了一个新的进程,并在其中运行Sender类,同时将signal作为参数传递给该进程。
在项目1的logger_send.py文件中,我们定义了Sender类来读取并发送传递过来的信号。具体实现如下:
- import time
- from multiprocessing.connection import Client
- class Sender:
- def __init__(self, signal):
- self.signal = signal
-
- def send_signal(self):
- address = ('localhost', 6000) # 指定log进程的地址和端口号
- with Client(address, authkey=b'secret password') as conn:
- conn.send(self.signal)
- conn.close()
- if __name__ == '__main__':
- sender = Sender(signal)
- sender.send_signal()
复制代码
在上述代码中,我们首先导入了time模块和multiprocessing.connection.Client类,然后定义了Sender类来读取并发送传递过来的信号。在__init__函数中,我们初始化了一个名为signal的实例变量,该变量存储了从主进程中传递过来的参数。接下来,在send_signal函数中,我们指定了log进程的地址和端口号(在此处假设为localhost:6000),并利用multiprocessing.connection.Client类建立了一个连接。然后,我们将信号发送给log进程,并关闭连接。
在项目2的logger.py文件中,我们需要先启动log进程,然后在其中定义一个Receiver类来接受并处理从main进程发来的信号。具体实现如下:
- import logging
- from multiprocessing import Process, connection
- class Receiver:
- def __init__(self):
- self.listener = connection.Listener(('localhost', 6000), authkey=b'secret password')
-
- def start(self):
- logger = logging.getLogger(__name__)
- logger.setLevel(logging.DEBUG)
- formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')
- file_handler = logging.FileHandler('my.log')
- file_handler.setFormatter(formatter)
- logger.addHandler(file_handler)
-
- while True:
- conn = self.listener.accept()
- signal = conn.recv()
- conn.close()
- logger.info(signal[1])
- if __name__ == '__main__':
- receiver = Receiver()
- receiver.start()
复制代码
在上述代码中,我们首先导入了logging模块和multiprocessing.Process、multiprocessing.connection模块中的Listener和connection类。然后,在Receiver类中,我们初始化了一个名为listener的实例变量,该变量用于监听连接到log进程的sender进程。在start函数中,我们首先配置了logger对象,指定了日志级别、格式和输出文件。接下来,我们使用一个无限循环来不断接受从sender进程传递过来的信号,并将其存储到signal变量中。最后,我们利用logger对象记录日志。
在项目2的main.py文件中,我们可以直接调用logging模块来记录日志,例如:
- import logging
- if __name__ == '__main__':
- logging.info('程序启动')
复制代码
这样一来,当我们运行项目1的main.py时,会自动启动一个新的sender进程,并将参数传递给log进程,log进程收到参数后会生成对应的日志文件。 |
|