{"id":34034367,"url":"https://github.com/pydsigner/taskit","last_synced_at":"2026-04-09T03:32:39.817Z","repository":{"id":5172344,"uuid":"6345698","full_name":"pydsigner/taskit","owner":"pydsigner","description":"A light-weight task management library","archived":false,"fork":false,"pushed_at":"2015-08-10T17:22:31.000Z","size":188,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-19T22:54:50.149Z","etag":null,"topics":["async","deferred-tasks","multiprocessing","multithreading","python"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"doctrine/DoctrineMigrationsBundle","license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pydsigner.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-10-23T02:36:39.000Z","updated_at":"2023-11-04T21:19:19.000Z","dependencies_parsed_at":"2022-07-06T11:21:45.590Z","dependency_job_id":null,"html_url":"https://github.com/pydsigner/taskit","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/pydsigner/taskit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydsigner%2Ftaskit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydsigner%2Ftaskit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydsigner%2Ftaskit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydsigner%2Ftaskit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pydsigner","download_url":"https://codeload.github.com/pydsigner/taskit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pydsigner%2Ftaskit/sbom","scorecard":{"id":751312,"data":{"date":"2025-08-11","repo":{"name":"github.com/pydsigner/taskit","commit":"3b228e2dbac16b3b84b2581f5b46e027d1d8fa7f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/15 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU Lesser General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-22T20:28:20.376Z","repository_id":5172344,"created_at":"2025-08-22T20:28:20.377Z","updated_at":"2025-08-22T20:28:20.377Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31584575,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"online","status_checked_at":"2026-04-09T02:00:06.848Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["async","deferred-tasks","multiprocessing","multithreading","python"],"created_at":"2025-12-13T19:43:54.059Z","updated_at":"2026-04-09T03:32:39.812Z","avatar_url":"https://github.com/pydsigner.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"TaskIt\n======\n\n\u003ctable\u003e\n\u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/pydsigner/taskit\"\u003eGithub\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\n        \u003ca href=\"https://github.com/pydsigner/taskit/releases/latest\"\u003e\n            \u003cimg src=\"https://img.shields.io/github/release/pydsigner/taskit.svg\"\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n        \u003cimg src=\"https://img.shields.io/github/downloads/pydsigner/taskit/latest/total.svg\"\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://pypi.python.org/pypi/taskit/\"\u003ePyPI\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\n        \u003cimg src=\"https://img.shields.io/pypi/v/taskit.svg\" alt=\"latest release\" /\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n        \u003cimg src=\"https://img.shields.io/pypi/dm/taskit.svg\" alt=\"PyPI downloads\" /\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\nTaskIt is a light-weight library for task delegation and control. TaskIt has\nseveral aspects, but these are all extensions of the main idea: that dumping\noff execution, whether to just another thread or to a process running on a\ndistant computer, should be simple, low-latency, and controllable.\n\nCore modules\n------------\n\nThe basic same-process task module, the logging module, and the multi-purpose\nresyncronization module fall into this category, as well as the threaded\nmodule.\n\n*simple.py* is just that -- a simple task creator. A task can be run in three\nways: waiting, callbacks, or ignored.\n\n*log.py* provides the refreshingly simple logging mechanism for TaskIt, with\nsplitters, file-like interfaces, and an interface to file-like objects.\n\n*resync.py* provides a novel way to get the best of both the synchronous and\nasynchronous worlds, with a simple yet powerful API allowing things such as a\nbasic producer-consumer model, handing off the results of a callback to another\nfunction, and more.\n\n*threaded.py* centralizes the imports (currently three) from thread/_thread.\n\nDistributed modules\n-------------------\n\nThese modules are the heart of the distributed task processing model (DTPM).\nThis model allows remote errors, server introspection, and remote control\nwithout obfuscating the transport mechanism. By default, the transport\nmechanism uses standard JSON, but a pickle codec is also available, and writing\ncustom codecs is quite simple.\n\n*common.py* provides common constants, functions, and classes.\n\n*backend.py* is the backend of the distributed task processing model. It\nprovides DTPM server writers with the ability to use almost any function\nwithout modification, and gives allowances for special cases.\n\n*frontend.py* is the frontend to the DTPM. The API is similar to that of\n*simple.py*, with the allowances of routing all calls through a *FrontEnd* and\nusing string identifiers. It provides it's own job count as well as access to\nthe backend's job count. It should be noted that a discrepancy between these\nnumbers is generally not a bad sign; client load is not necessarily the same as\nserver load. Generally, the server count is more meaningful than the client\ncount, but the client uses its own count when distributing tasks to avoid the\ndramatic increase in lag that would result from sorting by the server count.\n\nDaemonizing\n-----------\n\nThe daemonizing folder includes a /etc/init.d/ bash script, a control Python\nscript, and a multiduty port-expanding Python module/script. The bash script\nbelongs in /etc/init.d/ and should be customized to fit your setup. The control\nscript and the port expander must be in the same folder. The control script can\nbe used manually, and is also used by the bash script.\nThe bash script may eventually be replaced by a Python version thereof, at\nwhich time the port expander script would be changed into a taskit.util module.\n\nExamples\n--------\n\nThe examples directory contains example scripts for each feature of TaskIt.\n* *worker.py* is an example for taskit.backend and must be running when main.py\n  is run.\n* *main.py* is an example for taskit.frontend and requires worker.py to be run\n  first.\n* *resync.py* demos every feature of taskit.resync.\n* *simple.py* displays many of the taskit.simple features.\n\nDocumentation\n-------------\n\nMore information and documentation can be found in the doc directory.\n\n--------------------------------------------------------------------------------\n\nCopyright (c) 2012 Daniel Foerster/Dsigner Software \u003cpydsigner@gmail.com\u003e.\nTaskIt is distributed under the LGPLv3, see LICENSE for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpydsigner%2Ftaskit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpydsigner%2Ftaskit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpydsigner%2Ftaskit/lists"}