我正在使用 selenium 顺序处理许多页面,但为了提高性能,我决定并行化处理 - 将页面拆分到更多线程之间(这是可以完成的,因为页面彼此独立)。
这是简化的代码:
def process_page(driver, page, lock):
driver.get("page.url()")
driver.find_element_by_css_selector("some selector")
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "some selector")))
.
.
.
with lock:
for i in range(result_tuple.__len__()):
logger.info(result_tuple[i])
return result_tuple
def process_all_pages():
def pages_processing(id, lock):
result = []
with MyWebDriver(webdriver_options) as driver:
for i in range(50):
result.append(process_page(driver, pages[id * 50 + i], lock))
return result
lock = threading.Lock()
with ThreadPoolExecutor(4) as executor:
futures = []
for i in range(4):
futures.append(executor.submit(pages_processing, i, lock))
result = []
for i in range(futures.__len__()):
result.append(futures[i].result())
return …Run Code Online (Sandbox Code Playgroud) 函数的定义(>>)如下:
(>>) :: Monad m => m a -> m b -> m b
但我想实现这个功能翻转如下:
我有一个函数tabulate :: Int -> [Int] -> IO Int,它将列表打印为具有给定列数的表格,并返回 monad 中所有列表项的总和IO。之后我想要一个明确的putStr "\n".
如果我会使用以下内容:
tabulate >> (putStr "\n")
它会丢弃制表的结果,相反,它不会在表格后打印换行符。如果在以下位置执行此操作do:
smth = do
let a = tabulate
putStr "\n"
a
Run Code Online (Sandbox Code Playgroud)
这样做将再次在表格之前打印换行符,因为 是a在putStr.
在制表函数之后如何打印换行符?