业务介绍:
开始任务后,有一个日常任务,有一个临时任务,起两个进程。
然后在执行任务的时候,这两个进程各自创造一个进程池。分别执行各自的任务。代码如下:是可以得到结果的,但是呢,只要加上任何一个别的代码在循环中就不会去执行,向进程池中添加子进程的功能
import multiprocessing
import os, time
class TaskStart():
stop_temp_task = False
@staticmethod
def start_task():
p_temp = multiprocessing.Process(target=TaskStart.start_temp_task)
p_daily = multiprocessing.Process(target=TaskStart.start_daily_task)
p_temp.start()
p_daily.start()
p_daily.join()
p_temp.join()
@staticmethod
def start_temp_task():
temp_task_pool = multiprocessing.Pool(processes=5) # 临时任务进程池
i = 0
while (not TaskStart.stop_temp_task):
i += 1
temp_task_pool.apply_async(TaskStart.do_temp_task, args=(i,))
temp_task_pool.close()
temp_task_pool.join()
@staticmethod
def start_daily_task():
temp_task_pool = multiprocessing.Pool(processes=5) # 临时任务进程池
i = 100
while (not TaskStart.stop_temp_task):
i += 1
temp_task_pool.apply_async(TaskStart.do_daily_task, args=(i,))
temp_task_pool.close()
temp_task_pool.join()
@staticmethod
def do_temp_task(msg):
t_start = time.time()
print("%s开始执行,进程号为%d" % (msg, os.getpid()))
time.sleep(5)
t_stop = time.time()
print(msg, "执行完毕,耗时%0.2f" % (t_stop - t_start))
@staticmethod
def do_daily_task(msg):
t_start = time.time()
print("%s日常任务正在执行,进程号为%d" % (msg, os.getpid()))
time.sleep(10)
t_stop = time.time()
print(msg, "日常任务执行完毕,耗时%0.2f" % (t_stop - t_start))
if name == 'main':
TaskStart.start_task()
上边是正常的,假如添加入下两个代码,用来模拟,获取任务的时候,判断是哪个任务时候
只需要加个简单的业务 假如print就无法在进子进程了 结果如下