{"id":13605038,"url":"https://github.com/jczic/MicroWorkers","last_synced_at":"2025-04-12T02:32:35.933Z","repository":{"id":121870849,"uuid":"124145661","full_name":"jczic/MicroWorkers","owner":"jczic","description":"A micro workers class that easily manages a pool of threads to optimise simultaneous jobs and jobs endings, for MicroPython (used on Pycom modules \u0026 ESP32)","archived":false,"fork":false,"pushed_at":"2019-09-19T22:43:45.000Z","size":63,"stargazers_count":47,"open_issues_count":0,"forks_count":12,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-03T04:41:21.704Z","etag":null,"topics":["concurency","concurrency","esp32","hc2","jobs","lopy","micropython","multithread","multithreading","pool","pycom","queue","thread","threads","wipy","worker-queue","worker-threads","workers"],"latest_commit_sha":null,"homepage":"https://microworkers.hc2.fr","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jczic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-03-06T22:18:12.000Z","updated_at":"2025-04-02T16:26:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"9f797162-b119-4671-bb90-2f7cf494612c","html_url":"https://github.com/jczic/MicroWorkers","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jczic%2FMicroWorkers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jczic%2FMicroWorkers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jczic%2FMicroWorkers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jczic%2FMicroWorkers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jczic","download_url":"https://codeload.github.com/jczic/MicroWorkers/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248506925,"owners_count":21115509,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["concurency","concurrency","esp32","hc2","jobs","lopy","micropython","multithread","multithreading","pool","pycom","queue","thread","threads","wipy","worker-queue","worker-threads","workers"],"created_at":"2024-08-01T19:00:53.983Z","updated_at":"2025-04-12T02:32:35.700Z","avatar_url":"https://github.com/jczic.png","language":"Python","funding_links":[],"categories":["Threading","Libraries"],"sub_categories":["Threading"],"readme":"### MicroWorkers is a class that easily manages a pool of threads to optimise simultaneous jobs and jobs endings, for MicroPython (used on ESP32 and [Pycom](http://www.pycom.io) modules)\n\n![HC²](hc2.png \"HC²\")\n\nVery easy to integrate and very light with one file only :\n- `\"microWorkers.py\"`\n\nSimple but effective :\n- Use it to create a multitasking jobs container\n- Add jobs without blocking your main code\n- Be alerted by an event when a job has finished\n\n### Using *microWorkers* class :\n\n| Description  | Function |\n| - | - |\n| Constructor | `workers = MicroWorkers(workersCount, workersStackSize=None)` |\n| Adds a job | `workers.AddJob(name, function, arg=None, onFinished=None)` |\n\n| Description  | Property |\n| - | - |\n| Returns workers count | `workers.Count` |\n| Returns emaining jobs count | `workers.JobsInQueue` |\n| Returns jobs in process count  | `workers.JobsInProcess` |\n| Returns `True` if is in working | `workers.IsWorking` |\n\n### Simple example :\n```python\nfrom microWorkers import MicroWorkers\nfrom time         import sleep\n\ndef sleepJob(jobName, jobArg) :\n\tsleep(10)\n\treturn True\n\nworkers = MicroWorkers(workersCount=5)\n\nfor i in range(5) :\n\tworkers.AddJob('Job %s' % i, sleepJob)\n```\n\n### Example of using multiple jobs (with finished event) :\n```python\nfrom microWorkers import MicroWorkers\nfrom time         import sleep\n\nprint()\n\ndef jobA(jobName, jobArg) :\n    sleep(1)\n    return '%s:OK:1s' % jobName\n\ndef jobB(jobName, jobArg) :\n    sleep(2)\n    return '%s:OK:2s' % jobName\n\ndef jobC(jobName, jobArg) :\n    sleep(3)\n    return '%s:OK:3s' % jobName\n\ndef jobFinished(jobName, jobArg, jobResult) :\n    print('Job %s finished (%s)' % (jobName, jobResult))\n\n# workersStackSize must be greater than zero\n# it can be None to use the default stack size\nworkers = MicroWorkers(workersCount=5, workersStackSize=10*1024)\n\nfor x in range(5) :\n    workers.AddJob('JobA.%s' % x, jobA, arg=None, onFinished=jobFinished)\n    workers.AddJob('JobB.%s' % x, jobB, arg=None, onFinished=jobFinished)\n    workers.AddJob('JobC.%s' % x, jobC, arg=None, onFinished=jobFinished)\n\n# Waiting end of all jobs,\nwhile workers.IsWorking :\n    sleep(0.100)\n```\n\n\n### By JC`zic for [HC²](https://www.hc2.fr) ;')\n\n*Keep it simple, stupid* :+1:\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjczic%2FMicroWorkers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjczic%2FMicroWorkers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjczic%2FMicroWorkers/lists"}