asyncio run two different functions periodically with different intervals
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
Would it be possible using asyncio to run 2 different functions periodically with different interval for each function f
forever?
If yes - could you please provide code example.
import asyncio
async def f1(host,*arg):
# call every 1 sec
pass
async def f2(url,*args):
# call every 2 sec
pass
Expected output:
00:00 f1 for 1.1.1.1
00:01 f1 for 1.1.1.1
00:02 f2 for 'google.com'
00:02 f1 for 1.1.1.1
00:03 f1 for 1.1.1.1
00:04 f2 for 'google.com'
python-3.x python-asyncio
add a comment |
Would it be possible using asyncio to run 2 different functions periodically with different interval for each function f
forever?
If yes - could you please provide code example.
import asyncio
async def f1(host,*arg):
# call every 1 sec
pass
async def f2(url,*args):
# call every 2 sec
pass
Expected output:
00:00 f1 for 1.1.1.1
00:01 f1 for 1.1.1.1
00:02 f2 for 'google.com'
00:02 f1 for 1.1.1.1
00:03 f1 for 1.1.1.1
00:04 f2 for 'google.com'
python-3.x python-asyncio
add a comment |
Would it be possible using asyncio to run 2 different functions periodically with different interval for each function f
forever?
If yes - could you please provide code example.
import asyncio
async def f1(host,*arg):
# call every 1 sec
pass
async def f2(url,*args):
# call every 2 sec
pass
Expected output:
00:00 f1 for 1.1.1.1
00:01 f1 for 1.1.1.1
00:02 f2 for 'google.com'
00:02 f1 for 1.1.1.1
00:03 f1 for 1.1.1.1
00:04 f2 for 'google.com'
python-3.x python-asyncio
Would it be possible using asyncio to run 2 different functions periodically with different interval for each function f
forever?
If yes - could you please provide code example.
import asyncio
async def f1(host,*arg):
# call every 1 sec
pass
async def f2(url,*args):
# call every 2 sec
pass
Expected output:
00:00 f1 for 1.1.1.1
00:01 f1 for 1.1.1.1
00:02 f2 for 'google.com'
00:02 f1 for 1.1.1.1
00:03 f1 for 1.1.1.1
00:04 f2 for 'google.com'
python-3.x python-asyncio
python-3.x python-asyncio
edited Nov 16 '18 at 15:32
mrk
2,34311737
2,34311737
asked Nov 16 '18 at 14:37
unevenuneven
82
82
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Would it be possible using asyncio to run 2 different functions periodically with different interval for each f forever ?
Sure, just create a coroutine that does it in the "obvious" way, by awaiting the coroutine in an infinite loop with asyncio.sleep()
between invocations:
import asyncio, time
async def invoke_forever(period, corofn, *args):
while True:
then = time.time()
await corofn(*args)
elapsed = time.time() - then
await asyncio.sleep(period - elapsed)
Scenario described in the question would be set up with something like:
loop = asyncio.get_event_loop()
loop.create_task(invoke_forever(1, f1, 'host1'))
loop.create_task(invoke_forever(2, f2, 'host2'))
loop.run_forever()
You can also call asyncio.gather
to combine the two invoke_forever
into one awaitable, which allows using the asyncio.run
function introduced in Python 3.7:
asyncio.run(asyncio.gather(
invoke_forever(1, f1, 'host1'),
invoke_forever(2, f2, 'host2')))
1
Hat's off !!! - works like a charm. Indeed i tried in the meantime using ensure_future combined with gather adding while loop in each f1,f2..but i like your solution more..(did not came to the point to add worker in the middle like you did. I am on 3.6, so i did not tried "run" method....Thank You !!!
– uneven
Nov 16 '18 at 16:28
Is there a way to include "timeout" for each task?. I tired asyncio.wait_for. I can't make it working in such a scenarios (above) as it stops all tasks after given timeout value.
– uneven
Nov 16 '18 at 17:17
@uneven Have you tried replacingawait corofn(*args)
withawait asyncio.wait_for( corofn(*args))
, perhaps with a try/except TimeoutError if you want to continue after a timeout?
– user4815162342
Nov 16 '18 at 17:23
1
Simple and efficient - You made my day/weekend Sir - Thanks a million !!!
– uneven
Nov 16 '18 at 18:53
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53339921%2fasyncio-run-two-different-functions-periodically-with-different-intervals%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Would it be possible using asyncio to run 2 different functions periodically with different interval for each f forever ?
Sure, just create a coroutine that does it in the "obvious" way, by awaiting the coroutine in an infinite loop with asyncio.sleep()
between invocations:
import asyncio, time
async def invoke_forever(period, corofn, *args):
while True:
then = time.time()
await corofn(*args)
elapsed = time.time() - then
await asyncio.sleep(period - elapsed)
Scenario described in the question would be set up with something like:
loop = asyncio.get_event_loop()
loop.create_task(invoke_forever(1, f1, 'host1'))
loop.create_task(invoke_forever(2, f2, 'host2'))
loop.run_forever()
You can also call asyncio.gather
to combine the two invoke_forever
into one awaitable, which allows using the asyncio.run
function introduced in Python 3.7:
asyncio.run(asyncio.gather(
invoke_forever(1, f1, 'host1'),
invoke_forever(2, f2, 'host2')))
1
Hat's off !!! - works like a charm. Indeed i tried in the meantime using ensure_future combined with gather adding while loop in each f1,f2..but i like your solution more..(did not came to the point to add worker in the middle like you did. I am on 3.6, so i did not tried "run" method....Thank You !!!
– uneven
Nov 16 '18 at 16:28
Is there a way to include "timeout" for each task?. I tired asyncio.wait_for. I can't make it working in such a scenarios (above) as it stops all tasks after given timeout value.
– uneven
Nov 16 '18 at 17:17
@uneven Have you tried replacingawait corofn(*args)
withawait asyncio.wait_for( corofn(*args))
, perhaps with a try/except TimeoutError if you want to continue after a timeout?
– user4815162342
Nov 16 '18 at 17:23
1
Simple and efficient - You made my day/weekend Sir - Thanks a million !!!
– uneven
Nov 16 '18 at 18:53
add a comment |
Would it be possible using asyncio to run 2 different functions periodically with different interval for each f forever ?
Sure, just create a coroutine that does it in the "obvious" way, by awaiting the coroutine in an infinite loop with asyncio.sleep()
between invocations:
import asyncio, time
async def invoke_forever(period, corofn, *args):
while True:
then = time.time()
await corofn(*args)
elapsed = time.time() - then
await asyncio.sleep(period - elapsed)
Scenario described in the question would be set up with something like:
loop = asyncio.get_event_loop()
loop.create_task(invoke_forever(1, f1, 'host1'))
loop.create_task(invoke_forever(2, f2, 'host2'))
loop.run_forever()
You can also call asyncio.gather
to combine the two invoke_forever
into one awaitable, which allows using the asyncio.run
function introduced in Python 3.7:
asyncio.run(asyncio.gather(
invoke_forever(1, f1, 'host1'),
invoke_forever(2, f2, 'host2')))
1
Hat's off !!! - works like a charm. Indeed i tried in the meantime using ensure_future combined with gather adding while loop in each f1,f2..but i like your solution more..(did not came to the point to add worker in the middle like you did. I am on 3.6, so i did not tried "run" method....Thank You !!!
– uneven
Nov 16 '18 at 16:28
Is there a way to include "timeout" for each task?. I tired asyncio.wait_for. I can't make it working in such a scenarios (above) as it stops all tasks after given timeout value.
– uneven
Nov 16 '18 at 17:17
@uneven Have you tried replacingawait corofn(*args)
withawait asyncio.wait_for( corofn(*args))
, perhaps with a try/except TimeoutError if you want to continue after a timeout?
– user4815162342
Nov 16 '18 at 17:23
1
Simple and efficient - You made my day/weekend Sir - Thanks a million !!!
– uneven
Nov 16 '18 at 18:53
add a comment |
Would it be possible using asyncio to run 2 different functions periodically with different interval for each f forever ?
Sure, just create a coroutine that does it in the "obvious" way, by awaiting the coroutine in an infinite loop with asyncio.sleep()
between invocations:
import asyncio, time
async def invoke_forever(period, corofn, *args):
while True:
then = time.time()
await corofn(*args)
elapsed = time.time() - then
await asyncio.sleep(period - elapsed)
Scenario described in the question would be set up with something like:
loop = asyncio.get_event_loop()
loop.create_task(invoke_forever(1, f1, 'host1'))
loop.create_task(invoke_forever(2, f2, 'host2'))
loop.run_forever()
You can also call asyncio.gather
to combine the two invoke_forever
into one awaitable, which allows using the asyncio.run
function introduced in Python 3.7:
asyncio.run(asyncio.gather(
invoke_forever(1, f1, 'host1'),
invoke_forever(2, f2, 'host2')))
Would it be possible using asyncio to run 2 different functions periodically with different interval for each f forever ?
Sure, just create a coroutine that does it in the "obvious" way, by awaiting the coroutine in an infinite loop with asyncio.sleep()
between invocations:
import asyncio, time
async def invoke_forever(period, corofn, *args):
while True:
then = time.time()
await corofn(*args)
elapsed = time.time() - then
await asyncio.sleep(period - elapsed)
Scenario described in the question would be set up with something like:
loop = asyncio.get_event_loop()
loop.create_task(invoke_forever(1, f1, 'host1'))
loop.create_task(invoke_forever(2, f2, 'host2'))
loop.run_forever()
You can also call asyncio.gather
to combine the two invoke_forever
into one awaitable, which allows using the asyncio.run
function introduced in Python 3.7:
asyncio.run(asyncio.gather(
invoke_forever(1, f1, 'host1'),
invoke_forever(2, f2, 'host2')))
answered Nov 16 '18 at 15:27
user4815162342user4815162342
64.7k595151
64.7k595151
1
Hat's off !!! - works like a charm. Indeed i tried in the meantime using ensure_future combined with gather adding while loop in each f1,f2..but i like your solution more..(did not came to the point to add worker in the middle like you did. I am on 3.6, so i did not tried "run" method....Thank You !!!
– uneven
Nov 16 '18 at 16:28
Is there a way to include "timeout" for each task?. I tired asyncio.wait_for. I can't make it working in such a scenarios (above) as it stops all tasks after given timeout value.
– uneven
Nov 16 '18 at 17:17
@uneven Have you tried replacingawait corofn(*args)
withawait asyncio.wait_for( corofn(*args))
, perhaps with a try/except TimeoutError if you want to continue after a timeout?
– user4815162342
Nov 16 '18 at 17:23
1
Simple and efficient - You made my day/weekend Sir - Thanks a million !!!
– uneven
Nov 16 '18 at 18:53
add a comment |
1
Hat's off !!! - works like a charm. Indeed i tried in the meantime using ensure_future combined with gather adding while loop in each f1,f2..but i like your solution more..(did not came to the point to add worker in the middle like you did. I am on 3.6, so i did not tried "run" method....Thank You !!!
– uneven
Nov 16 '18 at 16:28
Is there a way to include "timeout" for each task?. I tired asyncio.wait_for. I can't make it working in such a scenarios (above) as it stops all tasks after given timeout value.
– uneven
Nov 16 '18 at 17:17
@uneven Have you tried replacingawait corofn(*args)
withawait asyncio.wait_for( corofn(*args))
, perhaps with a try/except TimeoutError if you want to continue after a timeout?
– user4815162342
Nov 16 '18 at 17:23
1
Simple and efficient - You made my day/weekend Sir - Thanks a million !!!
– uneven
Nov 16 '18 at 18:53
1
1
Hat's off !!! - works like a charm. Indeed i tried in the meantime using ensure_future combined with gather adding while loop in each f1,f2..but i like your solution more..(did not came to the point to add worker in the middle like you did. I am on 3.6, so i did not tried "run" method....Thank You !!!
– uneven
Nov 16 '18 at 16:28
Hat's off !!! - works like a charm. Indeed i tried in the meantime using ensure_future combined with gather adding while loop in each f1,f2..but i like your solution more..(did not came to the point to add worker in the middle like you did. I am on 3.6, so i did not tried "run" method....Thank You !!!
– uneven
Nov 16 '18 at 16:28
Is there a way to include "timeout" for each task?. I tired asyncio.wait_for. I can't make it working in such a scenarios (above) as it stops all tasks after given timeout value.
– uneven
Nov 16 '18 at 17:17
Is there a way to include "timeout" for each task?. I tired asyncio.wait_for. I can't make it working in such a scenarios (above) as it stops all tasks after given timeout value.
– uneven
Nov 16 '18 at 17:17
@uneven Have you tried replacing
await corofn(*args)
with await asyncio.wait_for( corofn(*args))
, perhaps with a try/except TimeoutError if you want to continue after a timeout?– user4815162342
Nov 16 '18 at 17:23
@uneven Have you tried replacing
await corofn(*args)
with await asyncio.wait_for( corofn(*args))
, perhaps with a try/except TimeoutError if you want to continue after a timeout?– user4815162342
Nov 16 '18 at 17:23
1
1
Simple and efficient - You made my day/weekend Sir - Thanks a million !!!
– uneven
Nov 16 '18 at 18:53
Simple and efficient - You made my day/weekend Sir - Thanks a million !!!
– uneven
Nov 16 '18 at 18:53
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53339921%2fasyncio-run-two-different-functions-periodically-with-different-intervals%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown