@@ -869,46 +869,36 @@ end
869869
870870# Callbacks
871871
872- # We define the callback methods in a loop here and add docstrings for them afterwards
873- for callback_type in (:added , :exiting , :exited )
874- let add_name = Symbol (:add_worker_ , callback_type, :_callback ),
875- remove_name = Symbol (:remove_worker_ , callback_type, :_callback ),
876- dict_name = Symbol (:worker_ , callback_type, :_callbacks )
877-
878- @eval begin
879- function $add_name (f:: Base.Callable ; key= nothing )
880- if ! hasmethod (f, Tuple{Int})
881- throw (ArgumentError (" Callback function is invalid, it must be able to accept a single Int argument" ))
882- end
883-
884- if isnothing (key)
885- key = Symbol (gensym (), nameof (f))
886- end
887-
888- $ dict_name[key] = f
889- return key
890- end
872+ function _add_callback (f, key, dict)
873+ if ! hasmethod (f, Tuple{Int})
874+ throw (ArgumentError (" Callback function is invalid, it must be able to accept a single Int argument" ))
875+ end
891876
892- $ remove_name (key) = delete! ( $ dict_name, key)
893- end
877+ if isnothing ( key)
878+ key = Symbol ( gensym (), nameof (f))
894879 end
880+
881+ dict[key] = f
882+ return key
895883end
896884
885+ _remove_callback (key, dict) = delete! (dict, key)
886+
897887"""
898888 add_worker_added_callback(f::Base.Callable; key=nothing)
899889
900890Register a callback to be called on the master process whenever a worker is
901891added. The callback will be called with the added worker ID,
902892e.g. `f(w::Int)`. Returns a unique key for the callback.
903893"""
904- function add_worker_added_callback end
894+ add_worker_added_callback (f :: Base.Callable ; key = nothing ) = _add_callback (f, key, worker_added_callbacks)
905895
906896"""
907897 remove_worker_added_callback(key)
908898
909899Remove the callback for `key`.
910900"""
911- function remove_worker_added_callback end
901+ remove_worker_added_callback (key) = _remove_callback (key, worker_added_callbacks)
912902
913903"""
914904 add_worker_exiting_callback(f::Base.Callable; key=nothing)
@@ -921,14 +911,14 @@ All callbacks will be executed asynchronously and if they don't all finish
921911before the `callback_timeout` passed to `rmprocs()` then the process will be
922912removed anyway.
923913"""
924- function add_worker_exiting_callback end
914+ add_worker_exiting_callback (f :: Base.Callable ; key = nothing ) = _add_callback (f, key, worker_exiting_callbacks)
925915
926916"""
927917 remove_worker_exiting_callback(key)
928918
929919Remove the callback for `key`.
930920"""
931- function remove_worker_exiting_callback end
921+ remove_worker_exiting_callback (key) = _remove_callback (key, worker_exiting_callbacks)
932922
933923"""
934924 add_worker_exited_callback(f::Base.Callable; key=nothing)
@@ -938,14 +928,14 @@ for any reason (i.e. not only because of [`rmprocs()`](@ref) but also the worker
938928segfaulting etc). The callback will be called with the worker ID,
939929e.g. `f(w::Int)`. Returns a unique key for the callback.
940930"""
941- function add_worker_exited_callback end
931+ add_worker_exited_callback (f :: Base.Callable ; key = nothing ) = _add_callback (f, key, worker_exited_callbacks)
942932
943933"""
944934 remove_worker_exited_callback(key)
945935
946936Remove the callback for `key`.
947937"""
948- function remove_worker_exited_callback end
938+ remove_worker_exited_callback (key) = _remove_callback (key, worker_exited_callbacks)
949939
950940# cluster management related API
951941"""
0 commit comments