Buy commercial curl support from WolfSSL. We help you work
out your issues, debug your libcurl applications, use the API, port to new
platforms, add new features and more. With a team lead by the curl founder
himself.
Re: Making Python Script Exit Completely with One Ctrl+C
- Contemporary messages sorted: [ by date ] [ by thread ] [ by subject ] [ by author ] [ by messages with attachments ]
From: Hongyi Zhao via curl-users <curl-users_at_lists.haxx.se>
Date: Sat, 9 Dec 2023 09:37:18 +0800
On Fri, Dec 8, 2023 at 10:44 AM Dan Fandrich via curl-users
<curl-users_at_lists.haxx.se> wrote:
>
> On Fri, Dec 08, 2023 at 09:56:44AM +0800, Hongyi Zhao via curl-users wrote:
> > I tried the following method but in vain:
> [...]
> > try:
> > pass
> > except KeyboardInterrupt:
> > kb_interrupt = True
>
> This won't accomplish anything because "pass" will never raise an exception.
> I have a feeling that even putting the entire contents of the progress callback
> into a try/except block won't even help; I suspect the exception is raised the
> moment the Python interpreter is returned to by pycurl while calling that
> callback, which is before even that point.
>
> You'll probably have to block SIGINT before calling calling into pycurl, then
> unblocking in the progress callback to check it, e.g.
>
> ...
> signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGINT])
> c.perform()
> signal.pthread_sigmask(signal.SIG_UNBLOCK, [signal.SIGINT])
> ...
>
> def progress(...):
> try:
> signal.pthread_sigmask(signal.SIG_UNBLOCK, [signal.SIGINT])
> except KeyboardInterrupt:
> print('interrupted!')
> return 1
> finally:
> signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGINT])
>
> or just set your own SIGINT handler that sets a flag (kb_interrupt), then check
> that flag in the progress callback and return an error if it's set.
I tried using the first method of your tips. It works, but the
calculated *Average Speed* is too high, as shown below:
(datasci) werner_at_X10DAi:~/Desktop$ python callback-SIGINT.py
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1453_018d83c677e05e71f172014fc3f45e39
Current Speed: 1371.74 kB/s
Current Speed: 6565.90 kB/s
Average Speed: 7552.72 kB/s
Proxy: HK_ssr_wo8o8npg4fny.nodelist.club_1303_b5bf85111d0f51c517ec7302d3f33ce1
Current Speed: 1252.55 kB/s
Current Speed: 7461.93 kB/s
Average Speed: 8807.27 kB/s
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1354_ddfba110eddfdb7037f389e9b5917477
Current Speed: 3081.76 kB/s
Current Speed: 9351.58 kB/s
Average Speed: 10745.23 kB/s
Proxy: HK_ssr_fwqvvo60u1mj.nodelist.club_1423_dba3b0996744e7b82eae7634626a5ba9
^Cinterrupted!
Average Speed: 156.74 kB/s
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1356_8ce27b1301fcbcb77cc5abb28cb127a6
Script terminated by user. Exiting.
I'm not sure how to fix this problem. Attached please find the test script.
Regards,
Zhao
> --
> Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-users
> Etiquette: https://curl.se/mail/etiquette.html
Received on 2023-12-09
Date: Sat, 9 Dec 2023 09:37:18 +0800
On Fri, Dec 8, 2023 at 10:44 AM Dan Fandrich via curl-users
<curl-users_at_lists.haxx.se> wrote:
>
> On Fri, Dec 08, 2023 at 09:56:44AM +0800, Hongyi Zhao via curl-users wrote:
> > I tried the following method but in vain:
> [...]
> > try:
> > pass
> > except KeyboardInterrupt:
> > kb_interrupt = True
>
> This won't accomplish anything because "pass" will never raise an exception.
> I have a feeling that even putting the entire contents of the progress callback
> into a try/except block won't even help; I suspect the exception is raised the
> moment the Python interpreter is returned to by pycurl while calling that
> callback, which is before even that point.
>
> You'll probably have to block SIGINT before calling calling into pycurl, then
> unblocking in the progress callback to check it, e.g.
>
> ...
> signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGINT])
> c.perform()
> signal.pthread_sigmask(signal.SIG_UNBLOCK, [signal.SIGINT])
> ...
>
> def progress(...):
> try:
> signal.pthread_sigmask(signal.SIG_UNBLOCK, [signal.SIGINT])
> except KeyboardInterrupt:
> print('interrupted!')
> return 1
> finally:
> signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGINT])
>
> or just set your own SIGINT handler that sets a flag (kb_interrupt), then check
> that flag in the progress callback and return an error if it's set.
I tried using the first method of your tips. It works, but the
calculated *Average Speed* is too high, as shown below:
(datasci) werner_at_X10DAi:~/Desktop$ python callback-SIGINT.py
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1453_018d83c677e05e71f172014fc3f45e39
Current Speed: 1371.74 kB/s
Current Speed: 6565.90 kB/s
Average Speed: 7552.72 kB/s
Proxy: HK_ssr_wo8o8npg4fny.nodelist.club_1303_b5bf85111d0f51c517ec7302d3f33ce1
Current Speed: 1252.55 kB/s
Current Speed: 7461.93 kB/s
Average Speed: 8807.27 kB/s
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1354_ddfba110eddfdb7037f389e9b5917477
Current Speed: 3081.76 kB/s
Current Speed: 9351.58 kB/s
Average Speed: 10745.23 kB/s
Proxy: HK_ssr_fwqvvo60u1mj.nodelist.club_1423_dba3b0996744e7b82eae7634626a5ba9
^Cinterrupted!
Average Speed: 156.74 kB/s
Proxy: SG_ssr_futeapbquf5m.nodelist.club_1356_8ce27b1301fcbcb77cc5abb28cb127a6
Script terminated by user. Exiting.
I'm not sure how to fix this problem. Attached please find the test script.
Regards,
Zhao
> --
> Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-users
> Etiquette: https://curl.se/mail/etiquette.html
-- Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-users Etiquette: https://curl.se/mail/etiquette.html
- text/x-python attachment: callback-SIGINT.py