You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入Playwright库后无法启动Celery Worker的问题求助

在Celery中运行Playwright代码启动Worker时出现AttributeError: module 'select' has no attribute 'epoll'错误

问题详情

我尝试在Celery任务中执行一段简单的Playwright代码,任务代码如下:

@shared_task
def get_title():
    with sync_playwright() as playwright:
        browser = playwright.chromium.launch()
        page = browser.new_page()
        page.goto('https://github.com')
        print(page.title())
        browser.close()

启动Celery Worker时立即报错,我试过Playwright的同步、异步多种调用方式均无效,移除Playwright的导入及相关代码后,Celery Worker可正常启动。

我推测问题与导入顺序有关,尝试在Celery之前导入Playwright或select库,但仍出现类似错误:'select' has no attribute 'epoll',最初还没有完整的回溯信息。

我的celery.py代码如下:

# celery.py
import os
from celery import Celery

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")

app = Celery("celery_app")

app.config_from_object("django.conf:settings", namespace="CELERY")

app.autodiscover_tasks()

运行环境为python:3.9.6-slim-buster,完整错误回溯信息如下:

Traceback (most recent call last):
  File "/usr/local/bin/celery", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.9/site-packages/celery/__main__.py", line 15, in main
    sys.exit(_main())
  File "/usr/local/lib/python3.9/site-packages/celery/bin/celery.py", line 217, in main
    return celery(auto_envvar_prefix="CELERY")
  File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.9/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/click/decorators.py", line 26, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/celery/bin/base.py", line 134, in caller
    return f(ctx, *args, **kwargs)
  File "/usr/local/lib/python3.9/site-packages/celery/bin/worker.py", line 343, in worker
    worker = app.Worker(
  File "/usr/local/lib/python3.9/site-packages/celery/worker/worker.py", line 94, in __init__
    self.app.loader.init_worker()
  File "/usr/local/lib/python3.9/site-packages/celery/loaders/base.py", line 111, in init_worker
    self.import_default_modules()
  File "/usr/local/lib/python3.9/site-packages/celery/loaders/base.py", line 105, in import_default_modules
    raise response
  File "/usr/local/lib/python3.9/site-packages/celery/utils/dispatch/signal.py", line 276, in send
    response = receiver(signal=self, sender=sender, **named)
  File "/usr/local/lib/python3.9/site-packages/celery/fixups/django.py", line 82, in on_import_modules
    self.worker_fixup.validate_models()
  File "/usr/local/lib/python3.9/site-packages/celery/fixups/django.py", line 120, in validate_models
    self.django_setup()
  File "/usr/local/lib/python3.9/site-packages/celery/fixups/django.py", line 116, in django_setup
    django.setup()
  File "/usr/local/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python3.9/site-packages/django/apps/registry.py", line 124, in populate
    app_config.ready()
  File "/usr/local/lib/python3.9/site-packages/django/contrib/admin/apps.py", line 27, in ready
    self.module.autodiscover()
  File "/usr/local/lib/python3.9/site-packages/django/contrib/admin/__init__.py", line 50, in autodiscover
    autodiscover_modules("admin", register_to=site)
  File "/usr/local/lib/python3.9/site-packages/django/utils/module_loading.py", line 58, in autodiscover_modules
    import_module("%s.%s" % (app_config.name, module_to_search))
  File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/app/backend/apps/series/admin.py", line 22, in <module>
    from apps.modules.advert.tasks import (
  File "/app/backend/apps/modules/advert/tasks.py", line 7, in <module>
    from playwright.sync_api import sync_playwright
  File "/usr/local/lib/python3.9/site-packages/playwright/sync_api/__init__.py", line 25, in <module>
    import playwright.sync_api._generated
  File "/usr/local/lib/python3.9/site-packages/playwright/sync_api/_generated.py", line 25, in <module>
    from playwright._impl._accessibility import Accessibility as AccessibilityImpl
  File "/usr/local/lib/python3.9/site-packages/playwright/_impl/_accessibility.py", line 17, in <module>
    from playwright._impl._connection import Channel
  File "/usr/local/lib/python3.9/site-packages/playwright/_impl/_connection.py", line 35, in <module>
    from pyee import EventEmitter
  File "/usr/local/lib/python3.9/site-packages/pyee/__init__.py", line 120, in <module>
    from pyee.trio import TrioEventEmitter as _TrioEventEmitter  # noqa
  File "/usr/local/lib/python3.9/site-packages/pyee/trio.py", line 7, in <module>
    import trio
  File "/usr/local/lib/python3.9/site-packages/trio/__init__.py", line 18, in <module>
    from ._core import (
  File "/usr/local/lib/python3.9/site-packages/trio/_core/__init__.py", line 27, in <module>
    from ._run import (
  File "/usr/local/lib/python3.9/site-packages/trio/_core/_run.py", line 2452, in <module>
    from ._io_epoll import EpollIOManager as TheIOManager
  File "/usr/local/lib/python3.9/site-packages/trio/_core/_io_epoll.py", line 188, in <module>
    class EpollIOManager:
  File "/usr/local/lib/python3.9/site-packages/trio/_core/_io_epoll.py", line 189, in EpollIOManager
    _epoll = attr.ib(factory=select.epoll)
AttributeError: module 'select' has no attribute 'epoll'

恳请各位提供解决方案或思路。


内容的提问来源于stack exchange,提问作者Ekin Ertaç

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:55:04