标签: worker

每个sidekiq工人有多种方法

我不明白.

根据Sidekiq文档,每个worker(我的名为FeedWorker)只能包含一个名为perform的方法.那么,如果我想通过同一个工作者运行多个方法呢?

例如,我的FeedWorker(你猜对了,它处理一个活动源)应该运行以下3种方法:

announce_foo
announce_bar
invite_to_foo
Run Code Online (Sandbox Code Playgroud)

我不认为这是一种无理的期望.我相信其他人都考虑过这一点.我不是天才,但我知道我并没有在这里期待新的理由.然而,目前尚不清楚如何做到这一点.

现在,看起来我必须以这种方式编码:

def perform(id, TYPE)
  if TYPE == BAR
    Bar.find(id) and_announce_bar
  else
    Foo.find(id) and_announce_foo
  end
end
Run Code Online (Sandbox Code Playgroud)

无聊和丑陋的代码.那里一定有更好的.任何帮助赞赏!

ruby-on-rails worker redis sidekiq

12
推荐指数
1
解决办法
4751
查看次数

使用Puma的工人,线程和池大小

如果我有一个1核心的服务器,有多少puma worker,thread和什么数据库池大小合适?

一般大拇指在这里是什么?

ruby pool worker puma

11
推荐指数
1
解决办法
1万
查看次数

如何让supervisord重启鸿工?

我有一些由supervisord管理的Python工作者,如果他们正常工作,应该连续打印到stdout(在每个完成的任务之后).但是,他们往往会挂起,我们很难找到错误.理想情况下,supervisord会注意到它们没有在X分钟内打印并重新启动它们; 任务是幂等的,所以不优雅的重启很好.是否有任何supervisord功能或插件可以做到这一点?或者是另一个类似管理员的程序,开箱即用?

我们已经在使用http://superlance.readthedocs.io/en/latest/memmon.html来杀死内存使用量突然增加,这可以缓解一些挂起,但是一个不会导致内存泄漏的挂起仍然会导致工人达到停顿状态.

worker background-process supervisord

11
推荐指数
1
解决办法
842
查看次数

Laravel 队列的 `retry_after` 和 `timeout` 选项有什么区别?

我在代码库中遇到一个问题,即作业被提前终止,而其timeout设置为 540 秒。然而,在查看文档后,我发现这是参数的问题retry_after,我现在将其增加到 600 秒,这解决了该问题。文档https://laravel.com/docs/7.x/queues在文档中有一个块说明:

--timeout值应始终比您的配置值短至少几秒retry_after。这将确保处理给定作业的工作人员始终在重试作业之前被终止。如果您的--timeout选项长于您的retry_after配置值,您的作业可能会被处理两次。

然而,我已经阅读了几次文档,但我无法理解retry_aftertimeout选项之间的区别。--timeout似乎是与工作相关的设置,而retry_after似乎是与工人相关(流程)的设置。此外,--timeout可以作为参数传递给php artisan queue:work ...,但它retry_after是要在 中定义的配置属性config/queue.php

任何人都对这种配置有一定的经验,并且可以通过示例说明差异吗?

php worker laravel

11
推荐指数
1
解决办法
1755
查看次数

Heroku worker dyno上的进程之间的TCP Socket通信

我想知道如何在Heroku工作者dyno上的进程之间进行通信.

我们希望Resque工作者读取队列并将数据发送到在同一个dyno上运行的另一个进程."其他进程"是一种现成的软件,通常使用TCP套接字(端口xyz)来监听命令.它设置为在Resque工作程序启动之前作为后台进程运行.

但是,当我们尝试本地连接到该TCP套接字时,我们无处可去.

我们设置队列的Rake任务执行此操作:

task "resque:setup" do
  # First launch our listener process in the background
  `./some_process_that_listens_on_port_12345 &`

  # Now get our queue worker ready, set up Redis backing store
  port = 12345
  ENV['QUEUE'] = '*'  
  ENV['PORT'] = port.to_s
  Resque.redis = ENV['REDISTOGO_URL']

  # Start working from the queue
  WorkerClass.enqueue
end
Run Code Online (Sandbox Code Playgroud)

这样做 - 我们的侦听器进程运行,Resque尝试处理排队的任务.但是,Resque作业失败,因为它们无法连接localhost:12345(具体而言Errno::ECONNREFUSED).

可能,Heroku在同一个dyno上阻止TCP套接字通信.有没有解决的办法?

我尝试从情境中取出"代码"并在命令行上执行(在服务器进程声称它已正确绑定到12345之后):

nc localhost 12345 -w 1 </dev/null
Run Code Online (Sandbox Code Playgroud)

但这也没有联系.

我们目前正在调查更改客户端/服务器代码以便UNIXSocket在两侧使用而不是TCPSocket,但由于它是一个现成的软件,我们宁愿避免使用我们自己的分支.

ruby sockets tcp heroku worker

10
推荐指数
2
解决办法
3039
查看次数

在Heroku dyno上运行多个进程是否可行?

我知道Heroku平台的内存限制,我知道将应用程序分成web和worker dynos的可扩展性要高得多.但是,我仍然希望在Web进程旁边运行异步任务以进行测试.Dynos价格昂贵,我想在Heroku提供的免费实例上进行原型设计.

在与Web进程相同的dyno中将新作业作为进程或子进程生成是否有任何问题?

python subprocess heroku worker

10
推荐指数
1
解决办法
1937
查看次数

在uwsgi应用程序中启动APScheduler最终会为每个工作者安排一个调度程序吗?

我有一个烧瓶应用程序,我需要APScheduler的调度功能.问题是:

我从哪里开始调度程序实例?

我使用uwsgi + nginx为多个工作者提供这个应用程序,我不会最终得到多个彼此无视的调度程序实例吗?如果这是正确的,单个作业将被多次触发,不是吗?

在这种情况下,最好的策略是什么,所以我最终只得到一个Scheduler实例,并且仍然可以从预定的作业中访问应用程序的上下文?

这个问题虽然有枪炮而不是uwsgi,但也有同样的问题,但答案可能类似.

下面是将"app"定义为uwsgi可调用应用程序对象的代码.包含此代码的文件称为wsgi.py(并不重要).

app = create_app(config=ProductionConfig())

def job_listener(event):
    get_ = "msg from job '%s'" % (event.job)
    logging.info(get_)

# This code below never gets invoked when I check with worker_id() == 1
# The only time it is run is with worker_id() value of 0
app.sched = Scheduler()
app.sched.add_jobstore(ShelveJobStore('/tmp/apsched_%d' % uwsgi.worker_id()), 'file')
app.sched.add_listener(job_listener,
                   events.EVENT_JOB_EXECUTED |
                   events.EVENT_JOB_MISSED |
                   events.EVENT_JOB_ERROR)
app.sched.start()
Run Code Online (Sandbox Code Playgroud)

python worker flask uwsgi apscheduler

10
推荐指数
1
解决办法
2736
查看次数

Spark CollectAsMap

我想知道collectAsMap在Spark中是如何工作的.更具体地说,我想知道所有分区的数据聚合将在何处发生?聚合发生在主人或工人中.在第一种情况下,每个工作人员在master上发送数据,当master从每个worker收集数据时,master将汇总结果.在第二种情况下,工人负责汇总结果(在他们之间交换数据之后),之后结果将被发送给主人.

我必须找到一种方法,以便主人能够分别从每个分区收集数据,而无需工人交换数据.

distributed-computing worker apache-spark

10
推荐指数
1
解决办法
1万
查看次数

如何在Windows上运行Node Cluster?

任何人都知道如何在Windows上运行Node Cluster?我无法在网上找到任何文章,似乎无法解决这个问题:

events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: write ENOTSUP
    at exports._errnoException (util.js:1007:11)
    at ChildProcess.target._send (internal/child_process.js:634:20)
    at ChildProcess.target.send (internal/child_process.js:521:19)
    at sendHelper (cluster.js:751:15)
    at send (cluster.js:534:12)
    at cluster.js:509:7
    at SharedHandle.add (cluster.js:99:3)
    at queryServer (cluster.js:501:12)
    at Worker.onmessage (cluster.js:449:7)
    at ChildProcess.<anonymous> (cluster.js:765:8)
Run Code Online (Sandbox Code Playgroud)

而代码......

if (cluster.isMaster) {
    for (let i = 0; i < numCPUs; i++) {
        cluster.fork();
    }
    cluster.on('online', (worker) => {
        console.log('Worker ' + worker.process.pid + ' is online');
    });
    cluster.on('exit', (worker, code, signal) => {
        console.log(`Worker ${worker.process.pid} died …
Run Code Online (Sandbox Code Playgroud)

javascript multithreading worker node.js node-cluster

10
推荐指数
1
解决办法
1439
查看次数

服务工作者:如何处理302重定向响应

嘿伙计们,我这个问题一直在苦苦挣扎,所以我决定发帖.

我在我的应用程序上安装了一个服务工作者,它安装得很好,激活得很好,缓存也可以.

但是当我点击一个302的页面完成缓存时,它会告诉我:

" http:// localhost:8000/form / " 的FetchEvent 导致网络错误响应:重定向响应用于重定向模式不是"跟随"的请求.

我已经阅读了很多关于这个主题的内容,我在这里查阅了帖子:服务工作者打破301重定向,然后https://github.com/w3c/ServiceWorker/issues/737https:// github. COM/GoogleChromeLabs/SW-预缓存/问题/ 220

据我所知,提取时的默认重定向模式是{redirect:"follow"},但是当我从重定向页面查看重定向模式时,我可以看到它是{redirect:"manual"}所以基本上我必须要做什么这是"手动".

以为我有点困惑,我正在努力如何在我的代码中实现这一点.

如果你们可以帮助我,你可以节省我的一天.

非常感谢你 !

这是我的代码:

const STATIC_CACHE_NAME = 'exell-static-v28';
const DYNAMIC_CACHE_NAME = 'exell-dynamic-v4';

// INSTALLING THE SERVICE WORKER AND PRECACHING APPSHELL
self.addEventListener('install', function(event) {
  console.log('[Service Worker] Service Worker installed');
  event.waitUntil(
    caches.open(STATIC_CACHE_NAME) // Create a static cache
    .then(function(cache) {
      console.log('[Service Worker] Precaching App Shell');
      cache.addAll([   // Add static files to the cache
        '/',
        '/build/app.js',
        '/build/global.css',
        'login',
        'logout',
        'offline',
        'form/',
        'form/new/first_page',
        'form/new/second_page', …
Run Code Online (Sandbox Code Playgroud)

javascript service redirect worker http-status-code-302

10
推荐指数
1
解决办法
2220
查看次数