AsyncTask
from panda3d.core import AsyncTask
- class AsyncTask
Bases:
Bases:
AsyncFuture
,Namable
This class represents a concrete task performed by an AsyncManager. Normally, you would subclass from this class, and override do_task(), to define the functionality you wish to have the task perform.
Inheritance diagram
-
enum DoneStatus
-
enumerator DS_done = 0
normal task completion
-
enumerator DS_cont = 1
run task again next epoch
-
enumerator DS_again = 2
start the task over from the beginning
-
enumerator DS_pickup = 3
run task again this frame, if frame budget allows
-
enumerator DS_exit = 4
stop the enclosing sequence
-
enumerator DS_pause = 5
pause, then exit (useful within a sequence)
-
enumerator DS_interrupt = 6
interrupt the task manager, but run task again
-
enumerator DS_await = 7
await a different task’s completion
-
enumerator DS_done = 0
-
enum State
-
enumerator S_inactive = 0
-
enumerator S_active = 1
-
enumerator S_servicing = 2
-
enumerator S_servicing_removed = 3
Still servicing, but wants removal from manager.
-
enumerator S_sleeping = 4
-
enumerator S_active_nested = 5
active within a sequence.
-
enumerator S_awaiting = 6
Waiting for a dependent task to complete
-
enumerator S_inactive = 0
- property alive bool
Returns true if the task is currently active or sleeping on some task chain, meaning that it will be executed in its turn, or false if it is not active. If the task has recently been removed while it is in the middle of execution, this will return false, because the task will not run again once it finishes.
- property average_dt float
Returns the average amount of time elapsed during each of the task’s previous run cycles, in seconds.
- clear_delay()
Removes any delay specified for the task. The next time the task is added to the queue, it will run immediately. This does not affect the task’s wake time if it has already been added to the queue.
- clear_name()
Resets the task’s name to empty.
- property done_event string
Returns the event name that will be triggered when the future finishes. See
set_done_event()
.- Getter
Returns the event name that will be triggered when the future finishes. See
set_done_event()
.- Setter
Sets the event name that will be triggered when the task finishes. This should only be called before the task has been started, or after it has finished and before it is about to be restarted (i.e. when
get_state()
returns S_inactive).
- property dt float
Returns the amount of time elapsed during the task’s previous run cycle, in seconds.
- get_average_dt() float
Returns the average amount of time elapsed during each of the task’s previous run cycles, in seconds.
- static get_class_type() TypeHandle
- get_delay() float
Returns the delay value that has been set via
set_delay()
, if any.
- get_dt() float
Returns the amount of time elapsed during the task’s previous run cycle, in seconds.
- get_elapsed_frames() int
Returns the number of frames that have elapsed since the task was started, according to the task manager’s clock.
It is only valid to call this if the task’s status is not S_inactive.
- get_elapsed_time() float
Returns the amount of time that has elapsed since the task was started, according to the task manager’s clock.
It is only valid to call this if the task’s status is not S_inactive.
- get_manager() AsyncTaskManager
Returns the
AsyncTaskManager
that this task is active on. This will be NULL if the state is S_inactive.
- get_max_dt() float
Returns the maximum amount of time elapsed during any one of the task’s previous run cycles, in seconds.
- get_name_prefix() str
Returns the initial part of the name, up to but not including any trailing digits following a hyphen or underscore.
- get_priority() int
Returns the task’s current priority value. See
set_priority()
.
- get_sort() int
Returns the task’s current sort value. See
set_sort()
.
- get_start_frame() int
Returns the frame number at which the task was started, according to the task manager’s clock.
It is only valid to call this if the task’s status is not S_inactive.
- get_start_time() float
Returns the time at which the task was started, according to the task manager’s clock.
It is only valid to call this if the task’s status is not S_inactive.
- get_task_chain() str
Returns the
AsyncTaskChain
on which this task will be running. Each task chain runs tasks independently of the others.
- get_task_id() int
Returns a number guaranteed to be unique for each different
AsyncTask
object in the universe.
- get_wake_time() float
If this task has been added to an
AsyncTaskManager
with a delay in effect, this returns the time at which the task is expected to awaken. It has no meaning if the task has not yet been added to a queue, or if there was no delay in effect at the time the task was added.If the task’s status is not S_sleeping, this returns 0.0.
- has_delay() bool
Returns true if a delay has been set for this task via
set_delay()
, or false otherwise.
- property id int
This is a number guaranteed to be unique for each different
AsyncTask
object in the universe.Returns a number guaranteed to be unique for each different
AsyncTask
object in the universe.
- is_alive() bool
Returns true if the task is currently active or sleeping on some task chain, meaning that it will be executed in its turn, or false if it is not active. If the task has recently been removed while it is in the middle of execution, this will return false, because the task will not run again once it finishes.
- property manager AsyncTaskManager
Returns the
AsyncTaskManager
that this task is active on. This will be NULL if the state is S_inactive.
- property max_dt float
Returns the maximum amount of time elapsed during any one of the task’s previous run cycles, in seconds.
- property name string
The name of this task.
- property priority int
- Getter
Returns the task’s current priority value. See
set_priority()
.- Setter
Specifies a priority value for this task. In general, tasks with a higher priority value are executed before tasks with a lower priority value (but only for tasks with the same sort value).
Unlike the sort value, tasks with different priorities may execute at the same time, if the
AsyncTaskManager
has more than one thread servicing tasks.Also see
AsyncTaskChain.set_timeslice_priority()
, which changes the meaning of this value. In the default mode, when the timeslice_priority flag is false, all tasks always run once per epoch, regardless of their priority values (that is, the priority controls the order of the task execution only, not the number of times it runs). On the other hand, if you set the timeslice_priority flag to true, then changing a task’s priority has an effect on the number of times it runs.
- recalc_wake_time()
If the task is currently sleeping on a task chain, this resets its wake time to the current time +
get_delay()
. It is as if the task had suddenly returned DS_again. The task will sleep for its current delay seconds before running again. This method may therefore be used to make the task wake up sooner or later than it would have otherwise.If the task is not already sleeping, this method has no effect.
- remove() bool
Removes the task from its active manager, if any, and makes the state S_inactive (or possible S_servicing_removed). This is a no-op if the state is already S_inactive.
If the task is a coroutine that is currently awaiting a future, this will fail, but see also
cancel()
.
- set_delay(delay: float)
Specifies the amount of time, in seconds, by which this task will be delayed after it has been added to the
AsyncTaskManager
. At least the specified amount of time (and possibly more) will elapse before the task begins.You may specify a delay of 0.0 to guarantee that the task will run in the next epoch following the one in which it is added.
Setting this value after the task has already been added will not affect the task’s wake time; it will only affect the task if it is re-added to the queue in the future, for instance if the task returns DS_again. However, see
recalc_wake_time()
if you wish to apply the delay effect immediately.
- set_done_event(done_event: str)
Sets the event name that will be triggered when the task finishes. This should only be called before the task has been started, or after it has finished and before it is about to be restarted (i.e. when
get_state()
returns S_inactive).
- set_priority(priority: int)
Specifies a priority value for this task. In general, tasks with a higher priority value are executed before tasks with a lower priority value (but only for tasks with the same sort value).
Unlike the sort value, tasks with different priorities may execute at the same time, if the
AsyncTaskManager
has more than one thread servicing tasks.Also see
AsyncTaskChain.set_timeslice_priority()
, which changes the meaning of this value. In the default mode, when the timeslice_priority flag is false, all tasks always run once per epoch, regardless of their priority values (that is, the priority controls the order of the task execution only, not the number of times it runs). On the other hand, if you set the timeslice_priority flag to true, then changing a task’s priority has an effect on the number of times it runs.
- set_sort(sort: int)
Specifies a sort value for this task. Within a given
AsyncTaskManager
, all of the tasks with a given sort value are guaranteed to be completed before any tasks with a higher sort value are begun.To put it another way, two tasks might execute in parallel with each other only if they both have the same sort value. Tasks with a lower sort value are executed first.
This is different from the priority, which makes no such exclusion guarantees.
- set_task_chain(chain_name: str)
Specifies the
AsyncTaskChain
on which this task will be running. Each task chain runs tasks independently of the others.
- property sort int
- Getter
Returns the task’s current sort value. See
set_sort()
.- Setter
Specifies a sort value for this task. Within a given
AsyncTaskManager
, all of the tasks with a given sort value are guaranteed to be completed before any tasks with a higher sort value are begun.To put it another way, two tasks might execute in parallel with each other only if they both have the same sort value. Tasks with a lower sort value are executed first.
This is different from the priority, which makes no such exclusion guarantees.
- property task_chain string
Returns/Specifies the
AsyncTaskChain
on which this task will be running. Each task chain runs tasks independently of the others.
-
enum DoneStatus