# Add a threading.run convenience function

**URL:** <https://discuss.python.org/t/add-a-threading-run-convenience-function/108430>\
**Category:** Ideas\
**Created:** [August 5, 2026, 6:41pm UTC](https://discuss.python.org/t/add-a-threading-run-convenience-function/108430 "2026-08-05T18:41:24Z")\
**Posts on this page:** 1\
**Showing post:** 16

<div class="post-metadata">

**Author:** ![vstinner](https://sea2.discourse-cdn.com/flex002/user_avatar/discuss.python.org/vstinner/32/15130_2.png) [@vstinner](https://discuss.python.org/u/vstinner)\
**Post date:** [August 10, 2026, 6:50pm UTC](https://discuss.python.org/t/add-a-threading-run-convenience-function/108430/16 "2026-08-10T18:50:40Z")

</div>

I think that I would be fine with a `threading.run()` function which doesn’t accept function keyword arguments, but only `threading.Thread` keyword arguments:

```python
def run(func, *args, name=None, daemon=None, context=None):
    thread = threading.Thread(target=func, args=args,
                              name=name, daemon=daemon, context=context)
    thread.start()
    return thread

```

The asyncio `loop.call_soon()` has the same limitation. The documentation suggests using `functools.partial()`:

```raw
   Most asyncio scheduling functions don't allow passing
   keyword arguments. To do that, use functools.partial():

      # will schedule "print("Hello", flush=True)"
      loop.call_soon(
          functools.partial(print, "Hello", flush=True))

```

According to Romain’s message, the _kwargs_ parameter is rarely used.

---

_[View the full topic](https://discuss.python.org/t/add-a-threading-run-convenience-function/108430)._
