|
3 | 3 | import logging
|
4 | 4 | import os
|
5 | 5 | import re
|
| 6 | +import threading |
6 | 7 | import time
|
7 | 8 | import uuid
|
8 | 9 | import warnings
|
@@ -61,18 +62,17 @@ def savepoint(cr):
|
61 | 62 | yield
|
62 | 63 |
|
63 | 64 |
|
64 |
| -if ThreadPoolExecutor is None: |
| 65 | +def _parallel_execute_serial(cr, queries, logger=_logger): |
| 66 | + cnt = 0 |
| 67 | + for query in log_progress(queries, logger, qualifier="queries", size=len(queries)): |
| 68 | + cr.execute(query) |
| 69 | + cnt += cr.rowcount |
| 70 | + return cnt |
65 | 71 |
|
66 |
| - def parallel_execute(cr, queries, logger=_logger): |
67 |
| - cnt = 0 |
68 |
| - for query in log_progress(queries, logger, qualifier="queries", size=len(queries)): |
69 |
| - cr.execute(query) |
70 |
| - cnt += cr.rowcount |
71 |
| - return cnt |
72 | 72 |
|
73 |
| -else: |
| 73 | +if ThreadPoolExecutor is not None: |
74 | 74 |
|
75 |
| - def parallel_execute(cr, queries, logger=_logger): |
| 75 | + def _parallel_execute_threaded(cr, queries, logger=_logger): |
76 | 76 | """
|
77 | 77 | Execute queries in parallel
|
78 | 78 | Use a maximum of 8 workers (but not more than the number of CPUs)
|
@@ -118,6 +118,18 @@ def execute(query):
|
118 | 118 | )
|
119 | 119 | )
|
120 | 120 |
|
| 121 | +else: |
| 122 | + _parallel_execute_threaded = _parallel_execute_serial |
| 123 | + |
| 124 | + |
| 125 | +def parallel_execute(cr, queries, logger=_logger): |
| 126 | + parallel_execute_impl = ( |
| 127 | + _parallel_execute_serial |
| 128 | + if getattr(threading.current_thread(), "testing", False) |
| 129 | + else _parallel_execute_threaded |
| 130 | + ) |
| 131 | + return parallel_execute_impl(cr, queries, logger=_logger) |
| 132 | + |
121 | 133 |
|
122 | 134 | def format_query(cr, query, *args, **kwargs):
|
123 | 135 | """
|
|
0 commit comments