te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>python - How to run multiple browser-use agents in parallel? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

python - How to run multiple browser-use agents in parallel? - Stack Overflow

programmeradmin3浏览0评论

Currently I have this code

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
:brief: Run multiple browser-use agents in parallel
"""
import asyncio
import os

from browser_use import Agent, Browser, BrowserConfig, Controller
from browser_use.browser.context import BrowserContext, BrowserContextConfig
from langchain_openai import ChatOpenAI


async def main():
    controller = Controller()
    llm = ChatOpenAI(model="gpt-4o", api_key=os.getenv("OPENAI_API_KEY"))
    browser_config = BrowserConfig(
        chrome_instance_path="/path/to/chrome",
        headless=False,
        disable_security=True,
        extra_chromium_args=[
            "--no-first-run",
            "--no-default-browser-check",
            "--disable-extensions",
            "--new-window",
        ],
    )
    browser = Browser(config=browser_config)
    context1 = BrowserContext(browser=browser)
    context2 = BrowserContext(browser=browser)

    agent = Agent(
        task="Go to amazon and search for toys without logging in",
        llm=llm,
        controller=controller,
        browser=browser,
        browser_context=context1,
    )

    agent2 = Agent(
        task="Go to Google and find the latest news",
        llm=llm,
        controller=controller,
        browser=browser,
        browser_context=context2,
    )

    await asyncio.gather(agent.run(), agent2.run())

if __name__ == "__main__":
    asyncio.run(main())

But, it does not truly run in parellel. I was considering using ProcessPoolExecutor but not sure how to mix concurrent.futures and asyncio cleanly. Essentially, the approach should be to create 2 different browser instances so that the agents can work in tandem.

Currently I have this code

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
:brief: Run multiple browser-use agents in parallel
"""
import asyncio
import os

from browser_use import Agent, Browser, BrowserConfig, Controller
from browser_use.browser.context import BrowserContext, BrowserContextConfig
from langchain_openai import ChatOpenAI


async def main():
    controller = Controller()
    llm = ChatOpenAI(model="gpt-4o", api_key=os.getenv("OPENAI_API_KEY"))
    browser_config = BrowserConfig(
        chrome_instance_path="/path/to/chrome",
        headless=False,
        disable_security=True,
        extra_chromium_args=[
            "--no-first-run",
            "--no-default-browser-check",
            "--disable-extensions",
            "--new-window",
        ],
    )
    browser = Browser(config=browser_config)
    context1 = BrowserContext(browser=browser)
    context2 = BrowserContext(browser=browser)

    agent = Agent(
        task="Go to amazon and search for toys without logging in",
        llm=llm,
        controller=controller,
        browser=browser,
        browser_context=context1,
    )

    agent2 = Agent(
        task="Go to Google and find the latest news",
        llm=llm,
        controller=controller,
        browser=browser,
        browser_context=context2,
    )

    await asyncio.gather(agent.run(), agent2.run())

if __name__ == "__main__":
    asyncio.run(main())

But, it does not truly run in parellel. I was considering using ProcessPoolExecutor but not sure how to mix concurrent.futures and asyncio cleanly. Essentially, the approach should be to create 2 different browser instances so that the agents can work in tandem.

Share Improve this question asked 2 days ago Pratik K.Pratik K. 3514 silver badges16 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

I found a simple reference implementation in the source code of browser-use. Essentially, we need to create a global browser object and share it amongst the various agents. They can be run in parallel using asyncio.gather.

import os
import sys

sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import asyncio

from langchain_openai import ChatOpenAI

from browser_use.agent.service import Agent
from browser_use.browser.browser import Browser, BrowserConfig
from browser_use.browser.context import BrowserContextConfig

browser = Browser(
    config=BrowserConfig(
        disable_security=True,
        headless=False,
        new_context_config=BrowserContextConfig(save_recording_path='./tmp/recordings'),
    )
)
llm = ChatOpenAI(model='gpt-4o')


async def main():
    agents = [
        Agent(task=task, llm=llm, browser=browser)
        for task in [
            'Search Google for weather in Tokyo',
            'Check Reddit front page title',
            'Look up Bitcoin price on Coinbase',
            'Find NASA image of the day',
            # 'Check top story on CNN',
            # 'Search latest SpaceX launch date',
            # 'Look up population of Paris',
            # 'Find current time in Sydney',
            # 'Check who won last Super Bowl',
            # 'Search trending topics on Twitter',
        ]
    ]

    await asyncio.gather(*[agent.run() for agent in agents])
    await browser.close()


if __name__ == '__main__':
    asyncio.run(main())
发布评论

评论列表(0)

  1. 暂无评论