如何动态组合生成器?

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())

【讨论】:

感谢您的建议。有没有办法在不停止流的情况下做到这一点,因为不要错过任何东西至关重要。可能会就地附加到流列表中吗? 可能有一种方法可以绑定新的流。查看更新以回答。

以上是关于如何动态组合生成器?的主要内容,如果未能解决你的问题,请参考以下文章

gif动态图片生成器,多张图片组合后生成动图...

根据另一列 SQL 动态生成一列的数据组合

Numpy 与组合生成器:如何加速组合?

Webpack:如何使用动态捆绑组合两个完全独立的捆绑包

如何组合两个 keras 生成器功能

jsp动态包含和静态包含