2017-03-02 1 views
0

Rails 5.0.1, Ruby 2.4.0, Sidekiq 4.2.9sidekiq part variable entre les threads

J'ai besoin de compter des données spécifiques dans les travaux d'arrière-plan. Je l'ai déjà implémenté via PostgreSQL, mais j'ai rencontré un problème: la simultanéité de Sidekiq charge très bien les connexions DB et si je diminue le nombre d'accès simultanés, l'exécution des tâches prend beaucoup de temps.

J'ai trouvé qu'il est possible d'utiliser un compteur atomique et dans un certain temps enregistrer le résultat à DB.

Puis-je partager une variable entre les threads dans Sidekiq? Si c'est le cas, comment dois-je initialiser la variable partagée?

Merci pour tout conseiller

+0

Pouvez-vous nous expliquer un peu ce que l'information que vous voulez réellement partager entre les emplois de sidekiq? –

+0

Je devrais juste stocker le compte de certaines données, et quand ce nombre obtiennent la limite, je devrais ignorer le travail et arrêter le traitement –

+0

Utiliser redis ferait le plus de sens – Anthony

Répondre

0

Si vous partagez une variable entre les threads, vous devez vous soucier de la bloquer avec un Mutex et échelles qu'à un seul processus. A la place, utilisez les commandes Redis pour incrémenter les compteurs.

https://redis.io/commands/incr

+0

donc, c'est une mauvaise idée d'utiliser Mutex. Droite? –

+0

Eh bien, vous perdez le bénéfice que Sidekiq vous donne est multithread. –

+0

Je n'ai pas dit que c'était une mauvaise idée d'utiliser un Mutex. Je n'ai pas dit que c'était une bonne idée non plus. –