如何动态组合生成器?
Posted
技术标签:
【中文标题】如何动态组合生成器?【英文标题】:How to dynamically combine generators? 【发布时间】:2021-02-22 18:49:49 【问题描述】:for submissions in itertools.zip_longest(submission_stream, submission_stream2): #want to put all streams here
for submission in submissions:
# processing
上面的代码适用于我已经初始化的两个流。我的目标是在 .csv 文件中组合基于用户名的流。如果有用户名,请为他们运行一个流。如果它被删除,或者添加了新用户名,请分别删除或启动该流。 流的一个例子是:
submission_stream = reddit.redditor("username").stream.submissions(skip_existing=True, pause_after=-1)
如果有人能指导我,我将不胜感激。
【问题讨论】:
【参考方案1】:您可能必须在每次更改 .csv
文件时重新开始流式传输,尽管您可以摆脱过滤 (itertools.filterfalse
)
用于删除用户名。代码草图,假设函数获取流列表,确定提交是否属于已删除的用户名,并确定文件是否因添加而更改:
while True:
streams = get_list_of_streams_from_csv()
for submissions in itertools.zip_longest(streams):
for submission in itertools.filterfalse(not_deleted, submissions):
#processing
if csv_changed_to_add()
break
添加额外的流,使用.filterfalse
捕获删除:
streams = get_list_of_streams_from_csv()
zip_iter = itertools.zip_longest(streams)
while True:
for submission in itertools.filterfalse(not_deleted, zip_iter):
#processing
if csv_changed_to_add()
break
zip_iter = itertools.zip_longest(zip_iter, get_list_of_new_streams())
【讨论】:
感谢您的建议。有没有办法在不停止流的情况下做到这一点,因为不要错过任何东西至关重要。可能会就地附加到流列表中吗? 可能有一种方法可以绑定新的流。查看更新以回答。以上是关于如何动态组合生成器?的主要内容,如果未能解决你的问题,请参考以下文章