|
1 | 1 | """Support for tasks, coroutines and the scheduler.""" |
2 | 2 |
|
3 | | -__all__ = ['Task', |
| 3 | +__all__ = ['Task', 'create_task', |
4 | 4 | 'FIRST_COMPLETED', 'FIRST_EXCEPTION', 'ALL_COMPLETED', |
5 | 5 | 'wait', 'wait_for', 'as_completed', 'sleep', 'async', |
6 | 6 | 'gather', 'shield', 'ensure_future', 'run_coroutine_threadsafe', |
@@ -44,6 +44,16 @@ def _all_tasks_compat(loop=None): |
44 | 44 | return {t for t in _all_tasks if futures._get_loop(t) is loop} |
45 | 45 |
|
46 | 46 |
|
| 47 | +def _set_task_name(task, name): |
| 48 | + if name is not None: |
| 49 | + try: |
| 50 | + set_name = task.set_name |
| 51 | + except AttributeError: |
| 52 | + pass |
| 53 | + else: |
| 54 | + set_name(name) |
| 55 | + |
| 56 | + |
47 | 57 | class Task(futures.Future): |
48 | 58 | """A coroutine wrapped in a Future.""" |
49 | 59 |
|
@@ -292,6 +302,17 @@ def _wakeup(self, future): |
292 | 302 | Task = _CTask = _asyncio.Task |
293 | 303 |
|
294 | 304 |
|
| 305 | +def create_task(coro, *, name=None): |
| 306 | + """Schedule the execution of a coroutine object in a spawn task. |
| 307 | +
|
| 308 | + Return a Task object. |
| 309 | + """ |
| 310 | + loop = events.get_running_loop() |
| 311 | + task = loop.create_task(coro) |
| 312 | + _set_task_name(task, name) |
| 313 | + return task |
| 314 | + |
| 315 | + |
295 | 316 | # wait() and as_completed() similar to those in PEP 3148. |
296 | 317 |
|
297 | 318 | FIRST_COMPLETED = concurrent.futures.FIRST_COMPLETED |
|
0 commit comments