Node.js创建两个Worker Threads仅一个运行,添加延迟恢复正常的原因
问题原因分析
这本质是ts-node-dev的热重载机制和Worker线程初始化时机的冲突,具体逻辑如下:
- ts-node-dev启动主进程时,会实时监视项目文件的变化,一旦检测到依赖文件变更(包括新加载的文件),就会触发主进程重启。
- 当你连续快速创建两个Worker线程时,第二个Worker的入口文件(
analyze-caption-job.ts)会被ts-node-dev识别成主进程的新增依赖,触发主进程重启——这时候第一个Worker还没完成初始化就被终止了,只有第二个Worker能在重启后的主进程里正常启动,所以你只能看到它的输出。 - 加5秒延迟后,主进程的初始依赖扫描已经完成,ts-node-dev的监视状态趋于稳定,这时候再启动第二个Worker,不会被误判成依赖变更,两个Worker都能正常存活并输出内容。
可行的解决办法
- 给ts-node-dev加
--ignore参数,排除Worker线程的文件,避免被误监视:npx ts-node-dev --ignore 'analyze-caption-job.ts' --ignore 'youtube-metadata-job.ts' cron.ts - 使用
--no-deps参数关闭依赖监视,只监视主文件的变化:npx ts-node-dev --no-deps cron.ts - 先把所有TypeScript文件编译成JavaScript,再直接用node运行主文件,彻底绕过ts-node-dev的热重载逻辑:
tsc && node cron.js
内容的提问来源于stack exchange,提问作者zymeth02
相关产品推荐
相关产品推荐

