基于Python多处理作业提交的所有运行作业的聚合条件
我有一项工作需要在Teradata数据库上做一些工作,并将db会话数作为参数。数据库对db会话数的最大限制为60。是否可以使用多进程有条件地处理作业,以便所有活动子进程中的sum(num\u db\u sessions)<;=max\u num\u db\u sessions?你知道吗
我只是在下面粘贴一些伪代码:
import multiprocessing as mp
import time
def dbworker(db_object, num_db_sessions):
# do work on db_object #####
# The sum(num_db_sessions) <= max_num_db_sessions
print (db_object, num_db_sessions)
# The db_objs with larger num_db_sessions take longer to finish
time.sleep(num_db_sessions)
return
if __name__ == "__main__":
max_num_db_sessions = 60
# JobsList (db_object,num_db_sessions)
jobs_list = [('A', 15), ('B', 15), ('C', 15), ('D', 15)
, ('E', 1), ('F', 1), ('G', 1), ('H', 1)
, ('I', 1), ('J', 1), ('K', 1), ('L', 1)
, ('M', 2), ('N', 1), ('O', 1), ('P', 1)
, ('Q', 2), ('R', 2), ('S', 2), ('T', 2)
, ('U', 2), ('V', 2), ('W', 2), ('X', 2)
, ('Y', 2), ('Z', 2)]
## Submit jobs_list to mutltiprocessing ####
for db_object,num_db_sessions in jobs_list:
dbworker(db_object,num_db_sessions) ## -->>> sum(num_db_sessions) <= max_num_db_sessions
## Is this possible ??
我已经弄明白了。下面的代码就是这样做的。关键要素包括:
1)运行单独的守护进程将任务放入队列。此操作的目标函数执行业务流程
2)将计数器作为多处理.value它跟踪当前正在运行的会话数。计数器的实现取自https://eli.thegreenplace.net/2012/01/04/shared-counter-with-pythons-multiprocessing
3)实施多处理管理器().list()以跟踪未提交的作业。你知道吗
4)使用毒丸方法发送None*number个\u child \u进程来中断worker进程,如毒丸方法中实现的。这是取自https://pymotw.com/3/multiprocessing/communication.html
worker函数使用时间。睡眠(num\u db\u sessions)作为模拟工作负载的方法(更高的处理时间)
这是密码。你知道吗
相关问题 更多 >
编程相关推荐