python - 将动态生成的列表传递给多进程
问题描述
我正在尝试将动态生成的日期变量列表传递到多进程池中。
data_2_days()
当我从多进程中询问特定日期时工作正常,但如果我使用生成字符串,data_start_and_end()
我会得到:
ValueError:需要超过 1 个值才能解压
我相信返回的字符串用引号引起来,这就是导致问题的原因。
生成要传递到多进程池的日期变量列表的最佳方法是什么?
谢谢
def data_start_and_end(start_date,end_date):
start_date = DateTime.strptime(start_date, '%Y-%m-%d')
end_date = DateTime.strptime(end_date, '%Y-%m-%d')
no_days = (end_date-start_date).days
date_str = "("
# date_end_str =
x = 0
while x <= no_days :
if x ==0:
date = start_date
if date.month < 10:
month_str = "0"+str(date.month)
else:
month_str = date.month
if date.day < 10:
day_str = "0"+str(date.day)
else:
day_str = date.day
date_str = date_str + "['"+ str(date.year) + "','" + str(month_str) + "','" + str(day_str) +"'],"
# print date_str
date = date + TimeDelta(days=1)
x=x+1
date_str = date_str[:-1] + ")"
print date_str
# dates =
return(date_str)
def data_2_days():
data = ( \
['2018','01','01'], \
['2018','01','02'])
return(data)
def figure_probs_mp(start_date,end_date):
data = ZZ_MP_data_lists.data_start_and_end(start_date,end_date)
pool = multiprocessing.Pool(36)
pool.map(figure_probs, data)
pool.close()
pool.join()
figure_probs_mp(start_date,end_date)
解决方案
这里的问题是您不是生成列表而是生成字符串。
在data_2_days
中,您返回一个包含 3 个元素的 2 个元组的列表。在figure_probs
中,当您遍历此列表时,您会在每次迭代时获得元组,您可以将其拆分为 3 个元素。
在data_start_and_end
中,您生成一个字符串,表示 3 个元素的元组列表。然后,在 中figure_probs
,当您遍历此字符串时,每次迭代都会得到 1 个字符,python 解释器返回 ,ValueError
因为您尝试将这个单个字符拆分为 3。更改您的data_start_and_end
函数以生成元组列表,它应该可以正常工作。
def data_start_and_end(start_date,end_date):
start_date = DateTime.strptime(start_date, '%Y-%m-%d')
end_date = DateTime.strptime(end_date, '%Y-%m-%d')
no_days = (end_date-start_date).days
list_dates = []
x = 0
current_date = start_date
while x <= no_days:
if date.month < 10:
month_str = "0"+str(current_date.month)
else:
month_str = str(current_date.month)
if date.day < 10:
day_str = "0"+str(current_date.day)
else:
day_str = str(current_date.day)
list_dates.append((str(current_date.year), month_str, day_str))
current_date = current_date + TimeDelta(days=1)
x = x + 1
return list_dates
附带说明,return
是 python 中的语句,不需要括号。我认为您也可以读取变量x
并迭代 while date <= end_date
。
推荐阅读
- java - 是否有可能有一个“HotReload”基于 docker 的 java 环境?
- c++ - 构造函数与数组初始值设定项的歧义
- swiftui - 如何将全局应用程序状态桥接到模型视图(使用@ObservedObject)?
- docker - docker ps 仅列出名称和状态
- azure - Azure 函数保存到没有内容标题的文件
- python - 使用python将十六进制地址.xlsx文件转换为csv int
- java - 改变弹出菜单背景颜色(以编程方式)
- reactjs - 在ant设计表选择中通过getCheckboxProps设置defaultChecked有什么问题?
- mysql - select a row for each column`s value
- javascript - Javascript 范围 - 全局 vs 功能