From f0de366b8a06c410a410fd1e517246432e28b4ed Mon Sep 17 00:00:00 2001 From: Hao Zhang Date: Sun, 15 Mar 2026 18:46:33 +0800 Subject: [PATCH] feat: Use pull mode generator for search and chain. --- ddss/chain.py | 10 +++------- ddss/chain.ts | 14 ++++---------- ddss/search.py | 10 +++------- ddss/search.ts | 14 ++++---------- 4 files changed, 14 insertions(+), 34 deletions(-) diff --git a/ddss/chain.py b/ddss/chain.py index f6bd00b..382f802 100644 --- a/ddss/chain.py +++ b/ddss/chain.py @@ -16,18 +16,14 @@ async def main(session: async_sessionmaker[AsyncSession]) -> None: for i in await sess.scalars(select(Facts).where(Facts.id > max_fact)): max_fact = max(max_fact, i.id) chain.add(i.data) - tasks = [] - def handler(rule): + for rule in chain: ds = str(rule) if idea := str_rule_get_str_idea(ds): - tasks.append(asyncio.create_task(insert_or_ignore(sess, Ideas, idea))) + await insert_or_ignore(sess, Ideas, idea) else: - tasks.append(asyncio.create_task(insert_or_ignore(sess, Facts, ds))) - return False + await insert_or_ignore(sess, Facts, ds) - chain.execute(handler) - await asyncio.gather(*tasks) await sess.commit() await asyncio.sleep(0) diff --git a/ddss/chain.ts b/ddss/chain.ts index c4d322d..90947b6 100644 --- a/ddss/chain.ts +++ b/ddss/chain.ts @@ -18,21 +18,15 @@ export async function main(sequelize: Sequelize): Promise { chain.add(fact.data); } - const tasks: Promise[] = []; - - const handler = (rule: Rule) => { + for (const rule of chain) { const ds = rule.toString(); const idea = strRuleGetStrIdea(ds); if (idea) { - tasks.push(insertOrIgnore(Idea, idea)); + await insertOrIgnore(Idea, idea); } else { - tasks.push(insertOrIgnore(Fact, ds)); + await insertOrIgnore(Fact, ds); } - return false; - }; - - chain.execute(handler); - await Promise.all(tasks); + } await new Promise((resolve) => setTimeout(resolve, 0)); } diff --git a/ddss/search.py b/ddss/search.py index 3b88475..3bb0e5b 100644 --- a/ddss/search.py +++ b/ddss/search.py @@ -16,17 +16,13 @@ async def main(session: async_sessionmaker[AsyncSession]) -> None: for i in await sess.scalars(select(Facts).where(Facts.id > max_fact)): max_fact = max(max_fact, i.id) search.add(i.data) - tasks = [] - def handler(rule): + for rule in search: ds = str(rule) - tasks.append(asyncio.create_task(insert_or_ignore(sess, Facts, ds))) + await insert_or_ignore(sess, Facts, ds) if idea := str_rule_get_str_idea(ds): - tasks.append(asyncio.create_task(insert_or_ignore(sess, Ideas, idea))) - return False + await insert_or_ignore(sess, Ideas, idea) - search.execute(handler) - await asyncio.gather(*tasks) await sess.commit() await asyncio.sleep(0) diff --git a/ddss/search.ts b/ddss/search.ts index 747a91e..8677328 100644 --- a/ddss/search.ts +++ b/ddss/search.ts @@ -18,20 +18,14 @@ export async function main(sequelize: Sequelize): Promise { search.add(fact.data); } - const tasks: Promise[] = []; - - const handler = (rule: Rule) => { + for (const rule of search) { const ds = rule.toString(); - tasks.push(insertOrIgnore(Fact, ds)); + await insertOrIgnore(Fact, ds); const idea = strRuleGetStrIdea(ds); if (idea) { - tasks.push(insertOrIgnore(Idea, idea)); + await insertOrIgnore(Idea, idea); } - return false; - }; - - search.execute(handler); - await Promise.all(tasks); + } await new Promise((resolve) => setTimeout(resolve, 0)); }