小编xba*_*laj的帖子

并行自动化时如何解决 Selenium 中使用的 urllib3.connectionpool 问题?

快速描述

我正在使用 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)

python selenium multithreading urllib selenium-webdriver

6
推荐指数
0
解决办法
3066
查看次数

Monadic 组合并翻转丢弃 (>>)

函数的定义(>>)如下:

(>>) :: 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)

这样做将再次在表格之前打印换行符,因为 是aputStr.

在制表函数之后如何打印换行符?

monads haskell

6
推荐指数
1
解决办法
175
查看次数