1

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.com and search for toys without logging in",
 llm=llm,
 controller=controller,
 browser=browser,
 browser_context=context1,
 )
 agent2 = Agent(
 task="Go to Google.com 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.

asked Feb 18, 2025 at 10:54

1 Answer 1

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())
answered Feb 19, 2025 at 7:48
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.